PGFPlots:线条不透明度渐变?

PGFPlots:线条不透明度渐变?

想象一个非常简单的 PGFPlot,例如:

\begin{tikzpicture}
\begin{axis}
    \addplot+[no marks]{x^2};
\end{axis}
\end{tikzpicture}

如何让线条从轴的左侧向右侧“淡出”?即,如何根据 x 轴上的位置逐渐改变线条的不透明度?

我已经设法使用以下代码在散点图上标记来实现这一点:

\begin{tikzpicture}
\begin{axis}[
    scatter/@pre marker code/.code= {\expandafter\scope\expandafter[opacity=0.1+\pgfplotspointmetatransformed/1000]},
    scatter/@post marker code/.code={\endscope},
]
    \addplot+[scatter, only marks] {x^2};
\end{axis}
\end{tikzpicture}

但我无法使用“无标记”线图来实现这一点。理想情况下,我希望线的颜色由循环列表定义(而不是必须使用自定义渐变)。

答案1

您可以使用mesh图并应用与标记相同的方法:通过缩放pgfplotspointmetatransformed

关键思想是mesh实现关于评估每个网格段的 tikz 绘制选项。这通常用于更新描边/填充颜色 - 但它也适用于opacityline width

只有一条错误消息,表示\pgfplotspointmetatransformed未声明。但是,输出是正确的!问题出现是因为绘制选项是在不同的上下文中评估的。如果您确保\pgfplotspointmetatransformed具有一些有用的全局值,则不会遇到错误消息:

在此处输入图片描述

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\def\pgfplotspointmetatransformed{1000}
\begin{axis}
    \addplot+[no marks] {x^2*1.1};
    \addplot+[mesh,line width=8pt,opacity=\pgfplotspointmetatransformed/1000,no marks]{x^2};
\end{axis}
\end{tikzpicture}

\end{document}

请注意,默认分配的方式point meta是使用shader=flat mean,即通过意思是相邻点元数据点。用于shader=flat corner避免平均。

答案2

您可以使用一维网格图和包含不透明度渐变的自定义颜色图。渐变通过键沿 x 轴设置point meta

\pgfplotsset{colormap={opaqueblue}{color(0cm)=(blue) ; color(1cm)=(blue!0)}}

\begin{tikzpicture}
\begin{axis}[colormap name=opaqueblue]
    \addplot[thick, mesh, point meta=x] {x^2};
\end{axis}
\end{tikzpicture}

相关内容