想象一个非常简单的 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 绘制选项。这通常用于更新描边/填充颜色 - 但它也适用于opacity
或line 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}