Änderungen im pfgplot-Balkendiagramm

Änderungen im pfgplot-Balkendiagramm

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:

Änderungen im gestapelten Balkendiagramm

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},

Bildbeschreibung hier eingeben

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}

verwandte Informationen