我想要一个带有 xy 误差线和图例的分组散点图。因此,每个点都是一个不同的组,具有自己的颜色、标记和图例条目。误差线应与其所属的标记具有相同的颜色。
以下是经过编辑的示例这回答:
\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}[
scatter/use mapped color={draw=mapped color, fill=mapped color},
scatter/classes={ a={mark=*,draw=red,fill=red!50},b={mark=square*,draw=green,fill=green!50},c={mark=triangle*,draw=magenta,fill=magenta!50} }
]
\addplot [
scatter,
only marks,
scatter src=\thisrow{class},
scatter src=explicit symbolic,
error bars with mapped color=err,
error bars/.cd,
y dir=both,
y explicit
]
table[x=x,y=y,y error=err,meta=meta] {
x y err class meta
0 0 1 0 a
1 1 .1 0 a
2 0 1 1 b
3 -.5 .2 2 c
};
\legend{Worlds,People,Barnacles}
\end{axis}
\end{tikzpicture}
\end{document}
但您会注意到,误差线的“括号”颜色不正确。我还没有同时创建 x 误差线。
也许,现在已经有一个比@Jake 建议的更好的解决方案了?
答案1
我认为下面的方法虽然很丑陋,但效果相对较好:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfplotsset{myerr/.append style={only marks,error bars/.cd, y dir=both,y explicit, x dir=both,x explicit} }
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+[myerr] coordinates { (0,0) +- (0.5,0.1)};
\addlegendentryexpanded{Worlds}
\addplot+[myerr] coordinates { (-1,1) +- (0.7,1.1)};
\addlegendentryexpanded{People}
\addplot+[myerr] coordinates { (-2,4) +- (2.7,2.1)};
\addlegendentryexpanded{Barnacles}
\end{axis}
\end{tikzpicture}
\end{document}
我刚刚添加了一个addplot
包含每个点的错误详细信息的程序。颜色、图例等由 负责pgfplots
,我可以使用生成数据点的同一程序(在我的情况下是 )自动执行此类代码Julia
。