今天我们来介绍使用基于Tikzpgfplots宏包绘制堆叠图、折线图和误差线的组合图形。

柱状图加误差条 python 柱状图如何加误差线_机器学习

作图分析

本图的难点在于:

  • 堆叠柱形图属于 ybar stacked类型的图,而折线图和误差线作图是另一种类型的图,当坐标系设置中有ybar stacked,键值时,pgfplots会将折线图的数据化成矩形堆叠上去,而不是画成线型图。
  • 解决方案是分别在两个坐标系中作图,pgfplots会将后面的图叠加到先作的图上,这就是“图层”的机制。两个坐标系的设置也是一个难点,它们的设置要相同,这样才不会出现坐标系不重合的情形。
  • 堆叠图的画法在前一篇推文中,已经做了详细介绍,下面只讲误差线的画法。

折线图+误差线的画法

首先解释一些关于误差的概念:
我们通过实验得到的观察值柱状图加误差条 python 柱状图如何加误差线_折线图_02和真值柱状图加误差条 python 柱状图如何加误差线_折线图_03之间往往有有一个差值,我们常常给出一个误差范围来描述观察值的精确程度。观测值与真值之差的绝对值的上界叫做绝对误差,记作柱状图加误差条 python 柱状图如何加误差线_人工智能_04.
柱状图加误差条 python 柱状图如何加误差线_柱状图加误差条 python_05

绝对误差占真值的绝对值的比率的上界则称为相对误差:

柱状图加误差条 python 柱状图如何加误差线_机器学习_06

如何在图形上呈现观测点的误差呢?以柱状图加误差条 python 柱状图如何加误差线_人工智能_07坐标为例,只需要在观测点柱状图加误差条 python 柱状图如何加误差线_折线图_02处画一条从点柱状图加误差条 python 柱状图如何加误差线_算法_09到点柱状图加误差条 python 柱状图如何加误差线_折线图_10的线段即可。

本图中数据表Total中给出了三列值,第一二列是柱状图加误差条 python 柱状图如何加误差线_折线图_02的取值,而第三列就是柱状图加误差条 python 柱状图如何加误差线_人工智能_07值的绝对误差。

画误差线的代码只有下面一行:

\addplot+[red!90!black,mark=none]plot [
error bars/.cd,
y dir=both, y explicit,
] table [y error=error] {yEr.dat};
\end{axis}
  • [red!90!black,mark=none]中选项说明折线的颜色和标记;
  • [error bars/.cd,y dir=both, y explicit,]中第一个键是对数值的设置,y dir=both的含义是显示完整的误差线,另外两种选择:y dir=plusy dir=minus分别只显示误差线的上半部分和下半部分。y explicit,是为每个观测值指定误差范围,相反地,y fixed=0.1是为所有的观测值指定一个统一的、不变的误差值。
\begin{tikzpicture}
\begin{axis}[
legend style={at={(0.5,-0.20)},
anchor=north,legend columns=-1},
ylabel={C(\textup{$\mu$g}\ \textup{g}$^{-1}$)},
symbolic x coords={bDec,Dec, Jan, Feb, Mar,
Apr, May, Jun, Jul, Aug, Sep, Oct, Nov,aNov},
xtick=data,
x tick label style={rotate=45,anchor=east},
xlabel={Month},
ymin=0,ymax=3500,
xmin=bDec,xmax=aNov
]
  \addplot+[red!90!black,mark=none]plot [
error bars/.cd,
y dir=both, y explicit,
] table [y error=error] {yEr.dat};
\end{axis}
\end{tikzpicture}

柱状图加误差条 python 柱状图如何加误差线_柱状图加误差条 python_13

合成一张图

将堆叠图和折线+误差线图放在同一个tikzpicture环境中,就能将它们合成为一幅图了,注意要将堆叠图放在前面,折线图+误差线图放在后面,否则会出现折线图被遮挡的意外效果哟!

得到的成图如下:

柱状图加误差条 python 柱状图如何加误差线_人工智能_14

学习Tikz作图虽然有一定难度,但是从效果来说还是值得我们花时间去学习的!