强制 pgfplots 根据循环列表而不是第一个图来绘制图例

强制 pgfplots 根据循环列表而不是第一个图来绘制图例

我使用 pgfplots 绘制文件中的多条曲线。该图分两步绘制

  1. 仅绘制标记,从文件中获取原始值
  2. 仅绘制线条,使用 gnuplot 近似值曲线

所以它看起来像这样(以下仅说明我遇到此问题的原因):

\foreach \r in {1,...,9} { % first loop, marks
    \addplot+[only marks]
        plot table [x index=0, y index=\r]{file.csv};
}
\foreach \rg in {2,...,10} { % second loop, lines (gnu starts with 1)
    \addplot+[no markers]
        gnuplot [raw gnuplot]
            {
                f(x)=a*x+b;
                a=1; b=0.1;
                fit f(x) 'file.csv' using 1:\rg\space every ::1 via a;
                plot [x=0:10] f(x);
            };
}

现在的问题是 pgfplot 似乎使用了它遇到的前几个图的样式。这使得所有图例条目都没有线条,因为第一个图的样式只有标记。

因此,以下 MWE 会产生如下输出,使图例条目没有任何线条:在此处输入图片描述

\documentclass{standalone}
\usepackage{pgfplots}


\pgfplotscreateplotcyclelist{mycyclelist}{
    {loosely dashed, blue}, {red}
}

\begin{document}
\begin{tikzpicture}
   \begin{axis}[cycle list name = mycyclelist, legend entries={a, b}, legend pos=north west]
    % only marks
        \addplot+[only marks]
        coordinates
        {
            (0,0)
            (10,5)
        };
        \addplot+[only marks]
        coordinates
        {
            (0,0)
            (10,7)
        };

        % no markers
        \addplot+[no markers]
        coordinates
        {
            (0,0)
            (10,5)
        };
        \addplot+[no markers]
        coordinates
        {
            (0,0)
            (10,7)
        };
    \end{axis}     
\end{tikzpicture}
\end{document}

答案1

这个选项legend image post style正是您所需要的:

\documentclass{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.10}

\pgfplotscreateplotcyclelist{mycyclelist}{
    {loosely dashed, blue}, {red}
}

\begin{document}
\begin{tikzpicture}
   \begin{axis}[
        cycle list name = mycyclelist, 
        legend entries={a, b}, 
        legend pos=north west,
        legend image post style={sharp plot},
        ]
    % only marks
        \addplot+[only marks]
        coordinates
        {
            (0,0)
            (10,5)
        };
        \addplot+[only marks]
        coordinates
        {
            (0,0)
            (10,7)
        };

        % no markers
        \addplot+[no markers]
        coordinates
        {
            (0,0)
            (10,5)
        };
        \addplot+[no markers]
        coordinates
        {
            (0,0)
            (10,7)
        };
    \end{axis}     
\end{tikzpicture}
\end{document}

在此处输入图片描述

后面的选项列表legend image post style适用于每个图例图像,并且与绘图样式无关。添加sharp plot本质上会覆盖该only marks语句 - 但仅适用于图例图像。

相关内容