使用 pgfplots 设置类似 gnuplot 的颜色图

使用 pgfplots 设置类似 gnuplot 的颜色图

我将使用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 调色板中理解到的 - 但我还没能弄清楚如何处理负色成分。

相关内容