定义散点图类中的误差线颜色

定义散点图类中的误差线颜色

我用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}

相关内容