Cambios en el gráfico de barras pfgplot

Cambios en el gráfico de barras pfgplot

Encontré muchas, muchas cosas útiles en tex.stackexchange para pgfplots. ¡Gracias por eso!

Pero no puedo entender cómo:

  • insertar una nueva línea después de "sin" o "con"
  • ocultar el valor 0 o toda la barra
  • cambie las marcas x para que no haya potencia decimal ([10^..])
  • evitar nodos cerca de coordenadas de beein plottet fuera del gráfico

los dos gráficos:

cambios en el diagrama de barras apiladas

y el código fuente:

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

Respuesta1

Para evitar la separación de palabras en yticklabel:

yticklabel style={text width=0.2\textwidth,align=flush left},

Para ocultar el valor 0 como nodos cerca de las coordenadas:

nodes near coords={%
  \pgfmathtruncatemacro\NNC{\pgfkeysvalueof{/data point/x}}%
  \ifnumequal{\NNC}{0}{}{\NNC}% needs package etoolbox
},

Para evitar el escalado de xtick:

scaled x ticks=false,

Para evitar que los nodos cercanos a las coordenadas se tracen fuera del gráfico:

enlarge x limits={0.15,upper},

ingrese la descripción de la imagen aquí

Código:

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

información relacionada