有没有办法在图例中带有标记符号的其中包含错误栏(也可能是错误标记,尽管在我当前的用例中我不需要它)?
(我想要这个的具体原因是数据量:我的散点图包含非常多(~1000-5000)个点。因此,我将误差线/标记涂成浅灰色,这样这些点就不会被一大团相同颜色的误差标记所遮挡。现在我希望灰色误差线能显示在图例中。)
我尝试在标记下方添加一条灰色实线,\addlegendimage{...}
但无法使其起作用。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend entries={Something},
]
\addplot [
only marks,
error bars/.cd,
y dir=both, y explicit,
error bar style={color=gray},
]
coordinates {
(0, 0) +- (0, .5)
(0.5, 0.5) +- (0, .5)
(1, 1) +- (0, .7)
};
\end{axis}
\end{tikzpicture}
\end{document}
编辑:Andrew Swann 的初始回答(尽管这与我提出这个问题时的想法并不完全一致)提供了一个很好的图例。更重要的是,它给了我足够的关于图例图像实现的提示,让我意识到改变图例图像可能是可行的。
根据他修改后的答案,我现在正在使用
\doccumentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\pgfplotsset{error bar legend/.style={%
/pgfplots/legend image code/.prefix code={%
\pgfkeysgetvalue{/pgfplots/error bars/error mark}{\pgfplotserrorbarsmark}%
\draw[%
/pgfplots/every error bar,
mark=\pgfplotserrorbarsmark,
/pgfplots/error bars/error mark options,
sharp plot,
##1
] plot coordinates {(0.3cm, -0.15cm) (0.3cm, 0.15cm)};%
%\pgfkeysalso{%
%/pgfplots/error bars/draw error bar={(0.3cm, 0cm)}{(0.3cm, 0.15cm)},
%/pgfplots/error bars/draw error bar={(0.3cm, 0cm)}{(0.3cm, -0.15cm)},
%};
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend entries={Something},
]
\addplot [
only marks,
error bar legend,
error bars/.cd,
y dir=both, y explicit,
error bar style={color=gray},
]
coordinates {
(0, 0) +- (0, .5)
(0.5, 0.5) +- (0, .5)
(1, 1) +- (0, .7)
};
\end{axis}
\end{tikzpicture}
\end{document}
使用/draw error bar
(现在已注释)存在以下问题二一件事s,但我还是不知道为什么:
未应用错误栏样式(即,错误栏不是灰色)这实际上是由于打字错误(我没有看到错误消息),显然是由于没有将内容包装在范围内- 标记不对称
答案1
\addlegendimage
需要紧接着\addlegendentry
。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [
only marks,
error bars/.cd,
y dir=both, y explicit,
error bar style={color=gray},
]
coordinates {
(0, 0) +- (0, .5)
(0.5, 0.5) +- (0, .5)
(1, 1) +- (0, .7)
};
\addlegendentry{Something}
\addlegendimage{color=gray,mark=|,
mark options={mark repeat=2,mark phase=1}}
\addlegendentry{Error bar}
\end{axis}
\end{tikzpicture}
\end{document}
的参数\addlegendimage
是样式选项。我使用它们来设置颜色,并使用垂直标记使图例图像看起来像错误栏。由于该栏是作为三个坐标的图绘制的,因此您可以通过指定重复2
从(phase
)第一个节点开始来获得第一个和最后一个位置的标记。标准设置是重复2
但阶段2
,这意味着标记仅绘制在中间。
要将误差线作为第一个图例条目的一部分打印,您可以进行legend image code
如下调整:
legend image code/.code={
\draw[sharp plot,mark=-,mark repeat=2,mark phase=1,color=gray,##1]
plot coordinates { (0.3cm, -0.15cm) (0.3cm,0cm) (0.3cm, 0.15cm) };%
\draw[mark repeat=2,mark phase=2,##1]
plot coordinates {(0cm,0cm) (0.3cm,0cm) (0.6cm,0cm)};%
}
这两个绘制命令中的第二个是图例的默认命令;第一个命令会添加一条垂直线,其两端有标记。按此顺序绘制可确保主标记覆盖中间的线。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\pgfplotsset{
/pgfplots/error bar legend/.style={
legend image code/.code={
\draw[sharp plot,mark=-,mark repeat=2,mark phase=1,color=gray,##1]
plot coordinates { (0.3cm, -0.15cm) (0.3cm,0cm) (0.3cm, 0.15cm) };%
\draw[mark repeat=2,mark phase=2,##1]
plot coordinates {(0cm,0cm) (0.3cm,0cm) (0.6cm,0cm)};%
}}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend entries={Something},
]
\addplot [
only marks,
error bar legend,
error bars/.cd,
y dir=both, y explicit,
error bar style={color=gray},
]
coordinates {
(0, 0) +- (0, .5)
(0.5, 0.5) +- (0, .5)
(1, 1) +- (0, .7)
};
\end{axis}
\end{tikzpicture}
\end{document}