我想使用 \foreach 绘制多个图,其中包含 2 个变量输入,一个用于传递变化参数,另一个用于传递图的颜色。我的 MWE 如下。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{arrows,calc,intersections}
\newcommand{\V}{\widetilde{V}}
\usepackage{siunitx}
\usepackage{color}
\begin{document}
\begin{figure}[!htbp]
\centering
\begin{tikzpicture}
\begin{semilogxaxis}[axis line style={->,thick},every tick/.style={color=gray},smooth,,xlabel={$\V$ /(\si{\cm \tothe{3}\per\mole})},ylabel={$P$ /bar}, xmin=10,xmax=1e5,ymin=-100,ymax=200,clip=false]
\def\m{9.864*10^7}%a
\def\R{8.314}
\def\n{45.05}%b
\foreach \y/\c in {200/red,275/blue,300/green,304/red} {
\addplot[color=\c,domain=50:1e5] {(\R*\y)/(x-\n) - \m/(\y^0.5*x*(x+\n))};
\addlegendentry{$T$ = \y \si{\kelvin}}}
编译只会给出未定义控制序列的错误,或者显示的图没有任何点。任何帮助都将不胜感激。
答案1
使用自定义的cycle list
而\pgfplotsinvokeforeach
不是 的变体\foreach
。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfplotscreateplotcyclelist{MyColors}{
red,thick\\
blue,thick\\
green,thick\\
cyan,thick\\
}
\newcommand{\V}{\widetilde{V}}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}[
axis line style={->,thick},
every tick/.style={color=gray},
smooth,
xlabel={$\V$ /(\si{\cm \tothe{3}\per\mole})},
ylabel={$P$ /bar},
xmin=10,xmax=1e5,
ymin=-1200,ymax=200, %changed ylim
cycle list name={MyColors},% use the cycle list defined above
legend style={legend pos=south east}]
\def\m{9.864*10^7}%a
\def\R{8.314}
\def\n{45.05}%b
\pgfplotsinvokeforeach{200,275,300,304} {
\addplot +[domain=50:1e5] {(\R*#1)/(x-\n) - \m/(#1^0.5*x*(x+\n))};
\addlegendentry{$T = \SI{#1}{\kelvin}$} % <-- note that this has changed
}
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
附录
要使用变浅的单一颜色,您可以使用opacity
一个小的计算,例如
\pgfplotsinvokeforeach{200,210,...,300} {
\addplot [domain=50:1e5,color=blue,very thick,opacity=(#1-180)/300] {(\R*#1)/(x-\n) - \m/(#1^0.5*x*(x+\n))};
\addlegendentry{$T = \SI{#1}{\kelvin}$}
}
您使用的数字完全取决于循环变量的值,您希望结果介于 0 和 1 之间。cycle list
当然,在这种情况下您不需要。
附录2
或者你可以使用该blue!<number>!white
功能,使用代码使颜色从浅蓝色变为蓝色
\pgfplotsforeachungrouped \i in {200,210,...,300} {
\pgfmathtruncatemacro{\rat}{(\i-180)/1.2}
\edef\temp{\noexpand
\addplot [domain=50:1e5,color=blue!\rat!white,very thick]
{(\R*\i)/(x-\n) - \m/(\i^0.5*x*(x+\n))};
\noexpand\addlegendentry{$T = \SI{\i}{\kelvin}$}
}\temp
}