如何访问 pgfplots 中的当前绘图颜色

如何访问 pgfplots 中的当前绘图颜色

我正在寻找一种方法来访问 pgfplots 的当前绘图索引,以便后续的绘图命令使用该绘图颜色。

\documentclass[]{standalone}
\usepackage{%
  tikz,%
  pgfplots,%
}
\pgfplotsset{%
  compat=1.17,%
  every axis/.append style={%
  colormap name=viridis,%
  colorbar,%
  cycle list={[samples of colormap=5]},%
  % cycle from colormap manual style,
  },% end every axis/.append style
  emphasizey/.code args={#1:#2}{% higlight a certrain range of y values
    \pgfplotsextra{%
      \shade[%
        inner color=white,%
        % /pgfplots/index of colormap=\pgfplots@listindex,% yields 'Unknown function' error
        /pgfplots/index of colormap=\pgfkeysvalueof{/pgfplots/cycle list shift},% yields 'Did not find a suitable input source pos in a 'of colormap' specification. Did you forget the 'source pos'?'
        outer color=.,%
        opacity=.5,%
        ] ({axis cs:\pgfkeysvalueof{/pgfplots/xmin},#1} -| {axis description cs:0,0})
        rectangle ({axis cs:\pgfkeysvalueof{/pgfplots/xmax},#2} -| {axis description cs:1,0});
    },% end pgfplotsextra
  },% end emphasizey
}% end pgfplotsset

\begin{document}
  \begin{tikzpicture}[]
    \begin{axis}[%
      point meta=f(x),%
      ]
      \addplot+ [mark=*, emphasizey={5:15}] {x^2};
      \addplot+ [mark=*, emphasizey={-3:3}] {x};
    \end{axis}
  \end{tikzpicture}
\end{document}

现在我希望此代码执行的操作是使用第一个图的蓝色绘制第一个阴影框,并使用第二个图的红色绘制第二个阴影框,但它们都是蓝色。

我还收到以下编译器错误:

Package PGF Math Error: Unknown function `listindex' (in '@listindex').

我尝试使用\pgfplotsvalueof{}甚至引入自定义计数器,并尝试使其随着每个情节而提升,并使用它来指向index of colormap

如果有人能阐明这个问题,我将不胜感激,因为我根本无法从源代码中提取比 pgfplots 用于\pgfplots@listindex编号图表的更多信息。

顺便说一句:这样做的目的是为了突出显示时间序列的平均值+-标准差......

编辑:我创建了一个示例,可以产生我想要实现的输出,但是我手动设置颜色,而不是我喜欢的自动方式。我希望能够省略,with <color>但仍然得到与展示相同的结果。

\documentclass[]{standalone}
\usepackage{%
  tikz,%
  pgfplots,%
}
\pgfplotsset{%
  compat=1.17,%
  emphasizey/.code args={#1:#2 with #3}{% higlight a certrain range of y values
    \pgfplotsextra{%
      \shade[%
        inner color=white,%
        outer color=#3,%
        opacity=.5,%
        ] ({axis cs:\pgfkeysvalueof{/pgfplots/xmin},#1} -| {axis description cs:0,0})
        rectangle ({axis cs:\pgfkeysvalueof{/pgfplots/xmax},#2} -| {axis description cs:1,0});
    },% end pgfplotsextra
  },% end emphasizey
}% end pgfplotsset

\begin{document}
  \begin{tikzpicture}[]
    \begin{axis}[%
      point meta=f(x),%
      ]
      \addplot+ [mark=*, emphasizey={5:15 with blue}] {x^2};
      \addplot+ [mark=*, emphasizey={-3:3 with red}] {x};
    \end{axis}
  \end{tikzpicture}
\end{document}

它应该是什么样子

相关内容