将图例条目指定为 \addplot 选项?

将图例条目指定为 \addplot 选项?

\addplot不知何故,使用单独的命令为每个图例条目指定图例条目\addlegendentry让我很困扰...我不确定为什么,可能是因为我的顺序感告诉我图例条目属于图,因此应该是图定义的一部分。这样,我就可以注释掉一个图,而不会因为图的顺序被改变而弄乱其他图的图例条目。

那么,定义一个密钥来执行此操作是否安全,或者是否存在我还没有想到的可能问题(技术、实用或意识形态)?

\documentclass{standalone}
\usepackage{pgfplots}
\pgfkeys{/pgfplots/legend entry/.code=\addlegendentry{#1}} % <-- this
\begin{document}
\begin{tikzpicture}
\begin{axis}
    \addplot[legend entry=$x$] {x}; 
    \addplot[legend entry=$x^2$] {x^2}; 
\end{axis}
\end{tikzpicture}
\end{document}

正如 percusse 在评论中指出的那样,当没有在某些图上指定键时,它会中断,但方式非常奇怪:

\addplot[red,legend entry=$10x$] {10*x};
\addplot[green] {x^2};
\addplot[blue,legend entry=$x^3$] {x^3};

标签混乱

为什么在最后一张图上重复第一个标签?当然,应该使用 从图例中删除第二个图forget plot,即使在使用 时也是如此\addlegendentry,但这根本无法解释为什么要为第三个图添加条目。

答案1

答案是“pgfplots 中没有这样的功能”。


实现这样的功能并不太难,但在处理没有图例条目的图时需要小心:您需要记住该值并检查当前图是否有​​值。

以下似乎有效:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{
    legend entry/.initial=,
    every axis plot post/.code={%
        \pgfkeysgetvalue{/pgfplots/legend entry}\tempValue
        \ifx\tempValue\empty
            \pgfkeysalso{/pgfplots/forget plot}%
        \else
            \expandafter\addlegendentry\expandafter{\tempValue}%
        \fi
    },
}

\begin{document}
\begin{tikzpicture}
\begin{axis}
    \addplot[red,legend entry=$x$] {x}; 
    \addplot[green] {x^2};
    \addplot[yellow,legend entry=$x^3$] {x^3}; 
\end{axis}
\end{tikzpicture}
\end{document}
\end{document}

请注意,您的解决方案复制了图例条目,因为键被分配了(至少)两次:一次在调查阶段,至少一次在可视化阶段。

在此处输入图片描述

相关内容