数据文件包含四列:x、y、y 上的误差、类别。类别是一个整数,我输入该整数,scatter src
因此我得到了一个图表,其中不同类别有不同的颜色。但是,误差线没有类别颜色。
\begin{tikzpicture}
\begin{axis}[colorbar right, colorbar sampled, colorbar style={samples=3},
point meta min=-0.5, point meta max=1.5,
scatter/use mapped color={draw=mapped color, fill=mapped color}]
\addplot[scatter, scatter src=\thisrow{class},
error bars/.cd, y dir=both, y explicit, error bar style={color=mapped color}]
table[x=x,y=y,y error=err] {
x y err class
0 0 1 0
1 1 1 0
2 0 1 1
3 2 2 1
};
\end{axis}
\end{tikzpicture}
在这种情况下,误差线是黑色的。如果error bar style={color=mapped color}
使用error bar style={color=red}
,误差线则是红色的。
如何才能获得误差线的正确颜色,例如点的颜色?
答案1
在 PGFplots 中正确实现此功能之前,您可以滥用该scatter/@pre marker code
键来绘制彩色误差线。我定义了一个键error bars with mapped color=<error source>
,它将设置必要的键,以便
\addplot [
scatter,
scatter src=\thisrow{class},
error bars with mapped color=err,
error bars/.cd,
y dir=both,
y explicit
]
table[x=x,y=y,y error=err] {
x y err class
0 0 1 0
1 1 1 0
2 0 1 1
3 2 2 1
};
\end{axis}
会给你
此解决方案存在一些问题:
目前,彩色误差线假设误差是绝对的,并且是正向和负向 y 方向的。不同类型的误差线必须在样式中手动调整error bars with mapped color
(仅更改相关样式是不够的error bars
)。
绘制绘图标记和彩色误差线时,坐标系会根据数据范围以不寻常的方式缩放(以 10 的幂为增量)。我还没有弄清楚如何自动访问缩放因子,因此您可能需要根据数据范围手动设置此因子。
代码如下:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{
error bars with mapped color/.style={
disabledatascaling,
visualization depends on=\thisrow{#1} \as \error,
visualization depends on=\thisrow{y} \as \y,
scatter/@pre marker code/.append style={
/pgfplots/error bars/.cd,
error mark options={draw=mapped color},
error mark=|,
draw error bar={(0,0)}{(0,\error*100)}, % *100 to correct for the scaling
draw error bar={(0,0)}{(0,-\error*100)} % might have to be adjusted (0.1,1,10,100,...)
},
scatter/@post marker code/.append code={}
}
}
\begin{tikzpicture}
\begin{axis}[colorbar right, colorbar sampled, colorbar style={samples=3},
point meta min=-0.5, point meta max=1.5,
scatter/use mapped color={draw=mapped color, fill=mapped color}]
\addplot [
scatter,
scatter src=\thisrow{class},
error bars with mapped color=err,
error bars/.cd,
y dir=both,
y explicit
]
table[x=x,y=y,y error=err] {
x y err class
0 0 1 0
1 1 1 0
2 0 1 1
3 2 2 1
};
\end{axis}
\end{tikzpicture}
\end{document}