我用scatter/classes
它来定义绘图的颜色和标记,我也想用这种方式指定误差线颜色(以匹配标记颜色)。我见过散点图中的误差线颜色帖子,但我不知道如何使用散点图类颜色,而不是映射颜色。在其中指定错误栏颜色scatter/classes
不起作用。
\documentclass[article]{standalone}
\usepackage{graphicx}
\usepackage{pgf,tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.7}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [scatter,
only marks,
scatter src=explicit symbolic,
scatter/classes={
A0={mark=o,red,/pgfplots/error bars/.cd,
error mark options={draw=red}},
A1={mark=square,blue}},
error bars/.cd,
y dir=both,
y explicit]
table[x=x,y=y,y error=err,meta=class,row sep=crcr] {
x y err class\\
0 0 1 A0\\
1 1 1 A0\\
2 0 1 A1\\
3 2 2 A1\\
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
一种方法是使用scatter/@pre marker code
“手动”绘制误差线和标记。这将自动使用绘图标记的绘制样式(包括颜色)。缺点是 PGFPlots 不会自动调整轴限制以适应误差线。为了解决这个问题,您还可以绘制“传统”但透明的误差线。
这是一个error bars with color
将包含错误值的列的名称作为强制参数的样式,并实现上述方法。必须使用该样式后您的scatter/classes
定义,否则它将被覆盖。
error bars with color/.style={
visualization depends on=\thisrow{#1} \as \error,
visualization depends on=y \as \y,
scatter/@pre marker code/.append code={ % Homebrew color bars
\draw (0,0) -- +(axis direction cs:0,-\error) -- +(axis direction cs:0,\error);
\draw (0,0) plot [mark=-] coordinates {(axis direction cs:0,\error) (axis direction cs:0,-\error)};
},
error bars/.cd, % Invisible color bars, to get the right axis limits
y dir=both,
y explicit,
error bar style={opacity=0},
/pgfplots/.cd
}
完整代码:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.7}
\pgfplotsset{
error bars with color/.style={
visualization depends on=\thisrow{#1} \as \error,
visualization depends on=y \as \y,
scatter/@pre marker code/.append code={ % Homebrew color bars
\draw (0,0) -- +(axis direction cs:0,-\error) -- +(axis direction cs:0,\error);
\draw (0,0) plot [mark=-] coordinates {(axis direction cs:0,\error) (axis direction cs:0,-\error)};
},
error bars/.cd, % Invisible color bars, to get the right axis limits
y dir=both,
y explicit,
error bar style={opacity=0},
/pgfplots/.cd
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [scatter,
only marks,
scatter src=explicit symbolic,
scatter/classes={
A0={mark=o,red,
},
A1={mark=square,blue}
},
error bars with color=err
]
table[x=x,y=y,y error=err,meta=class,row sep=crcr] {
x y err class\\
0 0 1 A0\\
1 1 1 A0\\
2 0 1 A1\\
3 2 2 A1\\
};
\end{axis}
\end{tikzpicture}
\end{document}