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