
Ich habe auf tex.stackexchange viele, viele hilfreiche Dinge für pgfplots gefunden – danke dafür!
Aber ich kann nicht herausfinden, wie ich:
- nach „ohne“ oder „mit“ eine neue Zeile einfügen
- Wert 0 oder den ganzen Balken ausblenden
- Ändern Sie die x-Häkchen, sodass keine Dezimalstellen mehr vorhanden sind ([10^..]).
- Verhindern Sie, dass Knoten in der Nähe von Koordinaten außerhalb des Diagramms dargestellt werden
die beiden Diagramme:
und der Quellcode:
\documentclass[a4paper]{report}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}
\title{Tests}
\pgfplotsset{counter_barchart/.style={
width=0.85\textwidth,
height=5cm,
xbar,
xmin=0,
xmajorgrids = true,
tick align = outside, xtick pos = left,
x tick label style={ /pgf/number format/1000 sep=},
enlarge y limits=0.4,
symbolic y coords={Ass. Optimization,with Optimization,without Optimization},
ytick=data,
yticklabel style={text width=0.2\textwidth},
every node near coord/.append style={/pgf/number format/1000 sep=},
nodes near coords,
nodes near coords align={horizontal},
legend style={at={(0.5,-0.35)},anchor=north,legend columns=-1},
reverse legend
}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[counter_barchart]
\addplot coordinates {(0,Ass. Optimization)(19243,with Optimization) (8898,without Optimization)};
\addplot coordinates {(7854,Ass. Optimization) (6652,with Optimization) (6548,without Optimization)};
\legend{Second,First}
\end{axis}
\end{tikzpicture}
\\
\begin{tikzpicture}
\begin{axis}[counter_barchart]
\addplot coordinates {(3985,without Optimization) (5456,with Optimization)};
\addplot coordinates {(5223,without Optimization) (11054,with Optimization)};
\legend{Second,First}
\end{axis}
\end{tikzpicture}
\end{document}
Antwort1
Um die Silbentrennung im zu vermeiden yticklabel
:
yticklabel style={text width=0.2\textwidth,align=flush left},
So verbergen Sie den Wert 0 als Knoten in der Nähe von Koordinaten:
nodes near coords={%
\pgfmathtruncatemacro\NNC{\pgfkeysvalueof{/data point/x}}%
\ifnumequal{\NNC}{0}{}{\NNC}% needs package etoolbox
},
So vermeiden Sie die Xtick-Skalierung:
scaled x ticks=false,
So verhindern Sie, dass Knoten in der Nähe von Koordinaten außerhalb des Diagramms dargestellt werden:
enlarge x limits={0.15,upper},
Code:
\documentclass[a4paper]{report}
\usepackage{etoolbox}
\usepackage{pgfplots}
\pgfplotsset{
counter_barchart/.style={
width=0.85\textwidth,
height=5cm,
xbar,
xmin=0,
xmajorgrids = true,
tick align = outside, xtick pos = left,
x tick label style={/pgf/number format/1000 sep=},
scaled x ticks=false,
enlarge y limits=0.4,
enlarge x limits={0.15,upper},
symbolic y coords={Ass. Optimization,with Optimization,without Optimization},
ytick=data,
yticklabel style={text width=0.2\textwidth,align=flush left},
nodes near coords={%
\pgfmathtruncatemacro\NNC{\pgfkeysvalueof{/data point/x}}%
\ifnumequal{\NNC}{0}{}{\NNC}%
},
nodes near coords align={horizontal},
legend style={at={(0.5,-0.35)},anchor=north,legend columns=-1},
reverse legend
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[counter_barchart,xtick={0,4000,8000,12000,16000,20000}]
\addplot coordinates {(0,Ass. Optimization)(19243,with Optimization) (8898,without Optimization)};
\addplot coordinates {(7854,Ass. Optimization) (6652,with Optimization) (6548,without Optimization)};
\legend{Second,First}
\end{axis}
\end{tikzpicture}
\vspace{1cm}
\begin{tikzpicture}
\begin{axis}[counter_barchart]
\addplot coordinates {(3985,without Optimization) (5456,with Optimization)};
\addplot coordinates {(5223,without Optimization) (11054,with Optimization)};
\legend{Second,First}
\end{axis}
\end{tikzpicture}
\end{document}