我想以 ybar 堆叠的形式在图表中显示性能测试的一些结果,但如您所见,一些标签打印在其他标签上,难以阅读(因为颜色)。现在我想在条形图的右侧显示标签,例如这里,但是有没有自动的方法可以做到这一点,还是我必须自己创建所有标签?我可以让线条不水平移动,并瞄准堆栈元素的中心吗?
当前的:
希望:
\documentclass[chapterprefix=true]{scrbook}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{tikz}
\usetikzlibrary{pgfplots.statistics}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar stacked,
ymin = 0,
ymax = 570,
xtick=data,
symbolic x coords={a, b},
nodes near coords]
\addplot coordinates{ (a, 2.9) (b, 2.9)};
\addplot coordinates{ (a, 80) (b, 200)};
\addplot coordinates{ (a, 400) (b, 100)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这是一个相对较短的方法。具体操作如下:
为name=X
标签指定一个(临时)名称,(X)
然后我移动它,使它不再与条形重叠。
另一方面,我需要对原始位置的引用。所以我.append code
用一个节点。您可以搜索node near coord
以pgfplots.code.tex
查看前者附加在哪里。诀窍是声明(Y)
紧随其后(X)
,因此(Y)
应该位于标签应该所在的原始位置。
最后画出线条。现在你可以自己修改样式,使用bend left
或类似的东西\draw[fill=none](Y.center)--+(10pt,0pt)--+(15pt,20pt)--(X);
。注意这.center
是必要的。
\documentclass{article}
\usepackage{pgfplots}\pgfplotsset{compat=1.12}\usetikzlibrary{pgfplots.statistics}
\begin{document}
\makeatletter
\begin{tikzpicture}
\begin{axis}[
ybar stacked,
/pgfplots/nodes near coords*/.append style={
every node near coord/.style={
name=X,
shift={(30pt,20pt)}
},
scatter/@post marker code/.append code={
\node(Y){};
\draw(X)--(Y.center);
}
},
nodes near coords,
ymin=0,ymax=570,xtick=data,symbolic x coords={a,b},
]
\addplot coordinates{(a, 2.9)(b, 2.9)};
\addplot coordinates{(a, 80 )(b, 200 )};
\addplot coordinates{(a, 400 )(b, 100 )};
\end{axis}
\end{tikzpicture}
\end{document}