我有多台机器用于进行基准测试。现在我想使用 pgfplots 在单个图表中显示单个 x 值(基准测试参数)的多个 y 值(测量中的方差)。每台机器都应该在图中拥有自己的“列”,类似于ybar
使用多个addplot
命令产生的效果。
在其他 问题我已经找到了有价值的提示,但是图例被手动标记偏移(xshift
)破坏了,因为它也应用在那里。
以下是 MWE:
\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
A B C
foo 1 2.4
foo 1 2.1
foo 1 2.6
foo 1 2.3
}\dataA
\pgfplotstableread{
A B C
bar 1 2.9
bar 1 2.2
bar 1 2.5
bar 1 2.1
}\dataB
\begin{tikzpicture}
\begin{axis}[only marks, ybar, symbolic x coords={1}, xtick={1}]
\foreach \id / \offs / \tab in {foo/-4/\noexpand\dataA, bar/4/\noexpand\dataB} {
\edef\temp{\noexpand\addplot+ [every mark/.append style={xshift=\offs pt}] table[x=B, y=C] {\tab};
\noexpand\addlegendentry{\id}
}
\temp
}
\end{axis}
\end{tikzpicture}
\end{document}
xoffset
我已经尝试通过添加[every mark/.append style={xshift=-\offs pt}]
命令来弥补addlegendentry
,但没有任何效果。
怎样才能在不弄乱图例的情况下,在情节中获得所需的“柱状效果”?
答案1
该键legend image post style
附加到的every legend image post
样式仅影响小图例图像(而不影响图例或文本)。
通过发布/tikz/xshift/.style=
我们只是禁用了xshift
密钥。
代码
\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotstableread{
A B C
foo 1 2.4
foo 1 2.1
foo 1 2.6
foo 1 2.3
}\dataA
\pgfplotstableread{
A B C
bar 1 2.9
bar 1 2.2
bar 1 2.5
bar 1 2.1
}\dataB
\begin{document}
\begin{tikzpicture}
\begin{axis}[only marks, ybar, symbolic x coords={1}, xtick={1},
legend image post style={/tikz/xshift/.style=}
]
\foreach \id / \offs / \tab in {foo/-4/\noexpand\dataA, bar/4/\noexpand\dataB} {
\edef\temp{\noexpand\addplot+ [every mark/.append style={xshift=\offs pt}] table[x=B, y=C] {\tab};
\noexpand\addlegendentry{\id}
}
\temp
}
\end{axis}
\end{tikzpicture}
\end{document}