![如何获得带有单个值并在侧面显示总和的堆叠条形图](https://linux22.com/image/335384/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%BE%97%E5%B8%A6%E6%9C%89%E5%8D%95%E4%B8%AA%E5%80%BC%E5%B9%B6%E5%9C%A8%E4%BE%A7%E9%9D%A2%E6%98%BE%E7%A4%BA%E6%80%BB%E5%92%8C%E7%9A%84%E5%A0%86%E5%8F%A0%E6%9D%A1%E5%BD%A2%E5%9B%BE.png)
基于这问题 我可以在条形图上放置部分值和总值。但是我的条形图有一些非常小的值,无法将数字放在某些范围内。我想将这些标签移到一边。我该怎么做?
请注意,在一种情况下,我有两个连续的小范围,因此将这些值放在交替的两侧会很棒。
提前致谢!
以下是我目前所掌握的信息:
以及相关代码:
\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}
答案1
因此,从文档中可以看出,这个问题有点难以解决,nodes near coords align
但visualization depends on
应该有灵丹妙药。奇怪的是,它失败了。
相反,必须将其visualization depends on
与every node near coord/.append style
解决方法结合起来。
还必须包含其内联数据,如下所述@Symbol1,以防止错误。
Package PGF Math Error: Unknown function `thisrow_unavailable_load_table_directly' (in 'thisrow_unavailable_load_table_directly')
我还必须将数据重新组织成表格形式。我以为可以使用元标记和原始坐标数据,但我还没有尝试过。
\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}