Pgfplots 动态不透明度

Pgfplots 动态不透明度

我正在尝试在一个轴上添加多个图,并且希望它们具有不同的不透明度(例如 0.1、0.2 等)。我尝试了不同的选项:

  1. 唯一真正编译的是带有 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}
    
  2. 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}
    
  3. 使用评估,无法编译:

    \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 ...
}

相关内容