
Residencia enestepregunta Pude poner valores parciales y totales en mi diagrama de barras. Sin embargo, mis barras tienen algunos valores realmente pequeños y es imposible ajustar los números en algunos rangos. Me gustaría cambiar esas etiquetas al costado. ¿Como lo puedo hacer?
Tenga en cuenta que en un caso tengo dos rangos pequeños consecutivos, por lo que sería fantástico tener esos valores en lados alternos.
¡Gracias de antemano!
Esto es lo que tengo hasta ahora:
Y el código relacionado:
\documentclass[tikz,border=10pt]{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{
show sum on top/.style={
/pgfplots/scatter/@post marker code/.append code={%
\node[
at={(normalized axis cs:%
\pgfkeysvalueof{/data point/x},%
\pgfkeysvalueof{/data point/y})%
},
anchor=south,
]
{\pgfmathprintnumber{\pgfkeysvalueof{/data point/y}}};
},
},
}
\begin{axis}[ybar stacked,
nodes near coords,
title={Energy spent},
xtick={0,...,4},
bar width=25pt,
ymin=0,
enlarge x limits=0.125,
ylabel = Energy (J),
legend entries={A,
B,
C,
D},
legend pos=outer north east,
]
\addplot[fill=blue!80] coordinates
{(0,0) (1,0) (2,20.544) (3,21.192)};
\addplot[fill=cyan!80] coordinates
{(0,0) (1,0) (2,9.610) (3,9.681)};
\addplot[fill=red!80] coordinates
{(0,0.505) (1,12.505) (2,0.247) (3,1.975)};
\addplot[fill=pink!80, show sum on top] coordinates
{(0,3.772) (1,1.075) (2,0.439) (3,2.066)};
\end{axis}
\end{tikzpicture}
\end{document}
Respuesta1
Así que este es un poco complicado de resolver según los documentos, nodes near coords align
en combinación con visualization depends on
lo que debería haber sido la solución milagrosa. Extrañamente falla.
En su lugar, uno debe combinarlo visualization depends on
como every node near coord/.append style
solución alternativa.
También se deben incluir sus datos en línea, como se explica en@Símbolo1, para evitar errores.
Package PGF Math Error: Unknown function `thisrow_unavailable_load_table_directly' (in 'thisrow_unavailable_load_table_directly')
También tuve que reestructurar los datos en forma de tabla. Supuse que se podrían haber usado metaetiquetas con los datos de coordenadas originales, pero no lo he probado.
\documentclass[tikz,border=10pt]{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{
show sum on top/.style={
/pgfplots/scatter/@post marker code/.append code={%
\node[
at={(normalized axis cs:%
\pgfkeysvalueof{/data point/x},%
\pgfkeysvalueof{/data point/y})%
},
anchor=south,
]
{\pgfmathprintnumber{\pgfkeysvalueof{/data point/y}}};
},
},
}
\begin{axis}[ybar stacked,
nodes near coords,
title={Energy spent},
xtick={0,...,4},
bar width=25pt,
ymin=0,
enlarge x limits=0.125,
ylabel = Energy (J),
legend entries={A,
B,
C,
D},
legend pos=outer north east,
]
\addplot+[visualization depends on={value \thisrow{Ax} \as \xdelta},
visualization depends on={value \thisrow{Ay} \as \ydelta},
every node near coord/.append style={xshift=\xdelta,yshift=\ydelta}] table [x={x}, y={A}] {
x A Ax Ay
0 0 0 0
1 0 0 0
2 20.544 0 0
3 21.192 0 0
};
\addplot+[visualization depends on={value \thisrow{Bx} \as \xdelta},
visualization depends on={value \thisrow{By} \as \ydelta},
every node near coord/.append style={xshift=\xdelta,yshift=\ydelta}]
table [x={x}, y={B}] {
x B Bx By
0 0 0 0
1 0 0 0
2 9.610 0 0
3 9.681 0 0
};
\addplot+[visualization depends on={value \thisrow{Cx} \as \xdelta},
visualization depends on={value \thisrow{Cy} \as \ydelta},
every node near coord/.append style={xshift=\xdelta,yshift=\ydelta}]
table [x={x}, y={C}] {
x C Cx Cy
0 0.505 25 5
1 12.505 0 0
2 0.247 -25 -10
3 1.975 -25 -10
};
\addplot+[visualization depends on={value \thisrow{Dx} \as \xdelta},
visualization depends on={value \thisrow{Dy} \as \ydelta},
every node near coord/.append style={xshift=\xdelta,yshift=\ydelta},
show sum on top]
table [x={x}, y={D}] {
x D Dx Dy
0 3.772 0 0
1 1.075 -25 0
2 0.439 -25 0
3 2.066 -25 0
};
\end{axis}
\end{tikzpicture}
\end{document}
Tenga en cuenta que pgfplots tiene valores predeterminados bastante sensatos, por lo que inserté las opciones +
entre y de ahí el\addplot
[]
Los colores difieren ligeramente.