
Baseado emessequestion, consegui colocar valores parciais e totais no meu gráfico de barras. Minhas barras têm alguns valores muito pequenos e é impossível ajustar os números em alguns intervalos. Eu gostaria de mudar essas etiquetas para o lado. Como eu posso fazer?
Observe que em um caso eu tenho dois pequenos intervalos consecutivos, então seria incrível ter esses valores em lados alternados.
Desde já, obrigado!
Aqui está o que tenho até agora:
E o 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}
Responder1
Portanto, este é um pouco complicado de resolver a partir dos documentos nodes near coords align
em combinação com o visualization depends on
que deveria ter sido a solução mágica. Estranhamente, ele falha.
Em vez disso, deve-se combinar visualization depends on
com every node near coord/.append style
uma solução alternativa.
É preciso também incluir seus dados inline, conforme explicado por@Símbolo1, para evitar erros.
Package PGF Math Error: Unknown function `thisrow_unavailable_load_table_directly' (in 'thisrow_unavailable_load_table_directly')
Também tive que reestruturar os dados em formato de tabela. Suponho que alguém poderia ter usado metatags com os dados de coordenadas originais, mas não tentei isso.
\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}
Observe que o pgfplots tem padrões razoáveis o suficiente, então inseri o +
entre \addplot
e as opções, []
portanto, oas cores diferem ligeiramente.