我想使用 PGFPlots 绘制条形图,其中误差线是根据数据自动计算出来的。
以下是我尝试的一个稍微简化的版本:
假设您有两个程序foo
和bar
,并且您正在测量它们的编译时间和执行时间。您对每个指标测量两次,最终得到以下数据:
program,measurement_no,compilation,execution
foo,1,4.2,10.2
foo,2,4.3,9.5
bar,1,2.5,6.6
bar,2,3.1,6.8
qux,1,10.1,8.0
qux,2,11.0,7.7
以下是我对此进行的基本尝试:
\documentclass[margin=1mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\pgfplotstableset{col sep=comma}
\begin{filecontents}{data.csv}
program,measurement_no,compilation,execution
foo,1,4.2,10.2
foo,2,4.3,9.5
bar,1,2.5,6.6
bar,2,3.1,6.8
qux,1,10.1,8.0
qux,2,11.0,7.7
\end{filecontents}
\pgfplotstableread{data.csv}\Data
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
y dir=reverse,
symbolic y coords={foo,bar,qux},
ylabel=Program,xlabel={Time [s]},
legend style={at={(.95,.5)},anchor=east},
]
\addplot+ table [y=program,x=compilation] \Data;
\addplot+ table [y=program,x=execution] \Data;
\legend{compilation,execution};
\end{axis}
\end{tikzpicture}
\end{document}
结果:
当然,这里有几个问题,它们可能都是相关的:
- ~~由于每个“键”有两个
x
值y
,因此图表中存在重复的行~~更新 #1:这是通过添加解决的ytick=data
- 这两个测量值相互重叠——更有意义的是,例如,算术平均值并绘制
- 没有误差线,自然,
error bars/y dir=both
如果没有额外的设置,仅仅添加是没有用的
我想要的是将每个程序的平均编译和执行时间显示为蓝色和红色条,并使用 PGFPlots 的误差条功能来显示实际测量值与该平均值的标准偏差。
我还应该补充一点,这是一个简化的例子,实际上,我有更多的测量值(10)和更多的条形图需要绘制(每个程序大约 5 个条形图)。
更新 #1:好的,我忽略了重复的y
标签是由于缺少ytick=data
选项造成的。主要问题仍未解决。