根据条形图中的数据自动计算误差线

根据条形图中的数据自动计算误差线

我想使用 PGFPlots 绘制条形图,其中误差线是根据数据自动计算出来的。

以下是我尝试的一个稍微简化的版本:

假设您有两个程序foobar,并且您正在测量它们的编译时间和执行时间。您对每个指标测量两次,最终得到以下数据:

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}

结果:

我的代码尝试的输出

当然,这里有几个问题,它们可能都是相关的:

  1. ~~由于每个“键”有两个xy,因此图表中存在重复的行~~更新 #1:这是通过添加解决的ytick=data
  2. 这两个测量值相互重叠——更有意义的是,例如,算术平均值并绘制
  3. 没有误差线,自然,error bars/y dir=both如果没有额外的设置,仅仅添加是没有用的

我想要的是将每个程序的平均编译和执行时间显示为蓝色和红色条,并使用 PGFPlots 的误差条功能来显示实际测量值与该平均值的标准偏差。

我还应该补充一点,这是一个简化的例子,实际上,我有更多的测量值(10)和更多的条形图需要绘制(每个程序大约 5 个条形图)。


更新 #1:好的,我忽略了重复的y标签是由于缺少ytick=data选项造成的。主要问题仍未解决。

相关内容