Pgfplots:在图例中显示错误标记

Pgfplots:在图例中显示错误标记

有没有办法在图例中带有标记符号的其中包含错误栏(也可能是错误标记,尽管在我当前的用例中我不需要它)?


(我想要这个的具体原因是数据量:我的散点图包含非常多(~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

Sample output

\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)};%
        }

这两个绘制命令中的第二个是图例的默认命令;第一个命令会添加一条垂直线,其两端有标记。按此顺序绘制可确保主标记覆盖中间的线。

Sample with bar

\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}

相关内容