我将使用gnuplot
默认颜色图pgfplots
。此颜色图在中定义,gnuplot
其中set palette rgb 7,5,15
的数字分别表示红色、绿色和蓝色的函数,映射如下:
* there are 37 available rgb color mapping formulae:
0: 0 1: 0.5 2: 1
3: x 4: x^2 5: x^3
6: x^4 7: sqrt(x) 8: sqrt(sqrt(x))
9: sin(90x) 10: cos(90x) 11: |x-0.5|
12: (2x-1)^2 13: sin(180x) 14: |cos(180x)|
15: sin(360x) 16: cos(360x) 17: |sin(360x)|
18: |cos(360x)| 19: |sin(720x)| 20: |cos(720x)|
21: 3x 22: 3x-1 23: 3x-2
24: |3x-1| 25: |3x-2| 26: (3x-1)/2
27: (3x-2)/2 28: |(3x-1)/2| 29: |(3x-2)/2|
30: x/0.32-0.78125 31: 2*x-0.84 32: 4x;1;-2x+1.84;x/0.08-11.5
33: |2*x - 0.5| 34: 2*x 35: 2*x - 0.5
36: 2*x - 1
* negative numbers mean inverted=negative colour component
* thus the ranges in `set pm3d rgbformulae' are -36..36
对于此特定地图,RGB 组件的行为与图表中调色板的最小值(rgb=(0,0,0) 黑色)到最大值(rgb=(1,1,0) 黄色)的行为相同。我还添加了调色板,以便您可以看到与图表的对应关系。
是否有办法指定颜色图函数,pgfplots
或者只能在颜色之间进行线性插值?
答案1
Pgfplots 通过插值表支持颜色图,即它需要类似
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
colorbar horizontal,
colormap={traditionalpm3d}{
color=(black) color=(blue) color=(red) color=(yellow)
},
]
\addplot3[surf,patch type=bilinear,samples=2,shader=interp] {x*y};
\end{axis}
\end{tikzpicture}
\end{document}
显然,这是您变体的不精确版本,因为它仅包含四种颜色。您可以生成任意数量的条目,以将 gnuplot 输出采样到所需的程度。
请注意,pgfplots
仅在具有明确颜色的表面图上下文中才知道采样的 RGB 值。这是 pgfplots 目前就颜色函数及其间的插值所知道的最接近的东西。
这部分答案更多的是关于连接关键字“颜色函数”和“pgfplots”,它与关于颜色图的问题基本无关。不过,我希望它有用。
下面是尝试重现上述颜色插值的示例。
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\def\exprB{sin(360*x)}
\begin{axis}[
view={0}{90},
mesh/color input=explicit mathparse,
point meta={symbolic={%
sqrt(x),% R
x^3,% G
%\exprB < 0 ? 1+\exprB : \exprB% B
abs(\exprB)% B
}},
shader=interp,
]
\addplot3[surf,domain=0:1, samples y=2] {1};
\end{axis}
\end{tikzpicture}
\end{document}
这是我从 gnuplots 调色板中理解到的 - 但我还没能弄清楚如何处理负色成分。