我正在尝试在一个轴上添加多个图,并且希望它们具有不同的不透明度(例如 0.1、0.2 等)。我尝试了不同的选项:
唯一真正编译的是带有 count 变量的 foreach。它不会改变图的不透明度:
\documentclass[a4paper,12pt]{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis}[width=0.8\textwidth] \foreach [count=\op] \x in{1,...,10} { \addplot[thick, color=blue, opacity={0.1*\op}] table[x index = 0, y index = \op, col sep=tab]{data.csv}; } \end{axis} \end{tikzpicture} \end{document}
pgfmathsetmacro,无法编译:
\documentclass[a4paper,12pt]{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis}[width=0.8\textwidth] \foreach \x in{1,...,10} { \pgfmathsetmacro\op{\x*0.1} \addplot[thick, color=blue, opacity={\op}] table[x index = 0, y index = \x, col sep=tab]{data.csv}; } \end{axis} \end{tikzpicture} \end{document}
使用评估,无法编译:
\documentclass[a4paper,12pt]{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis}[width=0.8\textwidth] \foreach [evaluate=\x as \op using {0.1*\x}] \x in{1,...,10} { \addplot[thick, color=blue, opacity={\op}] table[x index = 0, y index = \x, col sep=tab]{data.csv}; } \end{axis} \end{tikzpicture} \end{document}
我确信有可能,只是我对 pgfplots 还没有太多经验,可能遗漏了一些显而易见的东西。
数据文件可以在这里访问:数据.csv
答案1
对于此类应用程序,您需要使用\pgfplotsinvokeforeach
而不是普通\foreach
循环。普通循环的问题\foreach
是 PGFPlots 首先收集\addplot
循环内生成的所有命令,然后在稍后为所有图\op
设置变量时执行这些命令。确保循环变量的值与命令一起存储。1
\pgfplotsinvokeforeach
\addplot
为了使您的示例正常工作,请使用以下语法(请注意,您必须使用#1
循环变量而不是命名宏):
\pgfplotsinvokeforeach{1,...,10} {
\addplot[thick, color=blue, opacity={0.1*#1}] table ...
}