通过阅读 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}