在 \addplot 中参数化颜色

在 \addplot 中参数化颜色

通过阅读 Tikz 和 PGFPlots 手册,我得到的印象是使用多个循环变量语法\foreach我应该能够使用参数\clr中的循环变量更改图的颜色:\addplot

\documentclass{article}
\usepackage{tikz,pgfplots}

\begin{document}

    \begin{tikzpicture}[font=\tiny]
        \begin{axis}[
            axis x line=center,
            axis y line=center,
            restrict y to domain=-100:100,
        ]
        \foreach \d/\clr in {1/orange, 2/red, 3/green, 4/blue, 5/brown}
        {
            \addplot[smooth,\clr,domain=-5:5]{(x-\d)^3};
        }
        \end{axis}
    \end{tikzpicture}

\end{document}

这不起作用。我遗漏了什么?

答案1

这是一个扩展问题(我不是解释这个问题的合适人选)。但是,获得所需结果的一种方法是使用\pgfplotsinvokeforeach扩展其主体内容。我xstring曾经解析这两个组件,但也可以使用其他技术。

在此处输入图片描述

笔记:

  • 使用短宏名时,最好确保不会覆盖现有命令,因此 s \newcommand。此技术将显示这\d是一个现有宏。

代码:

\documentclass[border=2pt]{standalone}
\usepackage{tikz,pgfplots}
\usepackage{xcolor}
\usepackage{xstring}
\pgfplotsset{compat=newest}

\newcommand*{\diff}{}% Ensure it is not already defined
\newcommand*{\clr}{}% Ensure it is not already defined

\begin{document}

    \begin{tikzpicture}[font=\tiny]
        \begin{axis}[
            axis x line=center,
            axis y line=center,
            restrict y to domain=-100:100,
        ]
        \pgfplotsinvokeforeach{1/orange, 2/red, 3/green, 4/blue, 5/brown}
        {
            \StrBefore{#1}{/}[\diff]%
            \StrBehind{#1}{/}[\clr]%
            \edef\AddPlot{\noexpand\addplot[thick,smooth,color=\clr,domain=-5:5] {(x-\diff)^3};}%
            \AddPlot
        }
        \end{axis}
    \end{tikzpicture}

\end{document}

相关内容