Colors Gnuplot-使用函数定义调色板的间距

Colors Gnuplot-使用函数定义调色板的间距,colors,gnuplot,color-palette,Colors,Gnuplot,Color Palette,我正在绘制一个数据文件,其中的点的颜色是通过从0到1的调色板定义的。颜色是指文件列中的值;我为调色板分配了不同色调的“蓝色”: 设置cbrange[0:1] 设定调色板定义(1“#B0E2FF”、2“#87CEFA”、3“#7EC0EE”、4“#4F94CD”、5“#4E78A0”、6“#104E8B”、7“#1B3F8B”、8“#162252”) 问题是,调色板的颜色呈线性间隔。因此,对于我的数据来说,这并不好,我希望在中间值范围内(大颜色区域)有更高的精度,在极端值范围内(小颜色区域)有更小

我正在绘制一个数据文件,其中的点的颜色是通过从0到1的调色板定义的。颜色是指文件列中的值;我为调色板分配了不同色调的“蓝色”:

设置cbrange[0:1]

设定调色板定义(1“#B0E2FF”、2“#87CEFA”、3“#7EC0EE”、4“#4F94CD”、5“#4E78A0”、6“#104E8B”、7“#1B3F8B”、8“#162252”)

问题是,调色板的颜色呈线性间隔。因此,对于我的数据来说,这并不好,我希望在中间值范围内(大颜色区域)有更高的精度,在极端值范围内(小颜色区域)有更小的精度

我发现我可以使用对数比例的调色板:

设置日志cb


但考虑到我的需要,这当然对我也不好。我需要对调色板中的空间值应用自定义函数。这可能吗?

如果您有一个根据三个函数定义的调色板,或者如果您有一个保存调色板值的数据文件,那么这是可能的

考虑一下,您有一个映射函数
map(x)
(即您的自定义函数),它从
[0:1]->[0:1]
进行映射,并拉伸/缩小灰度范围。然后你可以使用:

red(x) = ...
green(x) = ...
blue(x) = ...
map(x) = ...
set palette functions red(map(gray)), green(map(gray)), blue(map(gray))
因此,对于文件:

map(x) = ...
set palette file 'palette.dat' using (map($1)):2:3:4
在您的情况下,您可以:

  • 根据需要定义调色板(例如,使用
    设置调色板定义…
  • 将调色板写入外部数据文件。这将写入一个“红色”数据集、一个“绿色”数据集、一个“蓝色”数据集和一个NTSC灰度值数据集
  • 重新排列数据文件,使其对
    设置调色板文件
    有用。这里我使用以下python脚本
    palete.py

    import numpy as np
    import sys
    
    A = np.loadtxt(sys.stdin, usecols=(0,1))
    np.savetxt(sys.stdout, A.reshape(256,8, order='F')[:,(0,4,5,6,7)], fmt='%.3f')
    
  • 定义适当的
    map(x)
    函数

  • 以下是脚本:

    # 1.
    set palette defined (1 "#B0E2FF", 2 "#87CEFA", 3 "#7EC0EE", 4 "#4F94CD", 5 "#4E78A0", 6 "#104E8B", 7 "#1B3F8B", 8 "#162252")
    
    # 2.
    set terminal push
    set terminal unknown
    set table 'palette.tmp'
    test palette
    unset table
    set terminal pop
    
    # 3.
    system('python palette.py < palette.tmp > palette.dat')
    
    # 4.
    map(x) = (-0.5+(2*(x-0.5))**3 + x)/3 + 0.5
    set palette file 'palette.dat' using (map($1)):2:3:4
    
    test palette
    
    #1。
    设定调色板定义(1“#B0E2FF”、2“#87CEFA”、3“#7EC0EE”、4“#4F94CD”、5“#4E78A0”、6“#104E8B”、7“#1B3F8B”、8“#162252”)
    # 2.
    设置终端推送
    设置终端未知
    设置表格“palete.tmp”
    测试调色板
    未设置的表
    设置终端弹出
    # 3.
    系统('pythonplate.pypalete.dat')
    # 4.
    map(x)=-0.5+(2*(x-0.5))**3+x)/3+0.5
    使用(map($1)):2:3:4设置调色板文件“palete.dat”
    测试调色板
    
    如果您有一个根据三个函数定义的调色板,或者如果您有一个保存调色板值的数据文件,则这是可能的

    考虑一下,您有一个映射函数
    map(x)
    (即您的自定义函数),它从
    [0:1]->[0:1]
    进行映射,并拉伸/缩小灰度范围。然后你可以使用:

    red(x) = ...
    green(x) = ...
    blue(x) = ...
    map(x) = ...
    set palette functions red(map(gray)), green(map(gray)), blue(map(gray))
    
    因此,对于文件:

    map(x) = ...
    set palette file 'palette.dat' using (map($1)):2:3:4
    
    在您的情况下,您可以:

  • 根据需要定义调色板(例如,使用
    设置调色板定义…
  • 将调色板写入外部数据文件。这将写入一个“红色”数据集、一个“绿色”数据集、一个“蓝色”数据集和一个NTSC灰度值数据集
  • 重新排列数据文件,使其对
    设置调色板文件
    有用。这里我使用以下python脚本
    palete.py

    import numpy as np
    import sys
    
    A = np.loadtxt(sys.stdin, usecols=(0,1))
    np.savetxt(sys.stdout, A.reshape(256,8, order='F')[:,(0,4,5,6,7)], fmt='%.3f')
    
  • 定义适当的
    map(x)
    函数

  • 以下是脚本:

    # 1.
    set palette defined (1 "#B0E2FF", 2 "#87CEFA", 3 "#7EC0EE", 4 "#4F94CD", 5 "#4E78A0", 6 "#104E8B", 7 "#1B3F8B", 8 "#162252")
    
    # 2.
    set terminal push
    set terminal unknown
    set table 'palette.tmp'
    test palette
    unset table
    set terminal pop
    
    # 3.
    system('python palette.py < palette.tmp > palette.dat')
    
    # 4.
    map(x) = (-0.5+(2*(x-0.5))**3 + x)/3 + 0.5
    set palette file 'palette.dat' using (map($1)):2:3:4
    
    test palette
    
    #1。
    设定调色板定义(1“#B0E2FF”、2“#87CEFA”、3“#7EC0EE”、4“#4F94CD”、5“#4E78A0”、6“#104E8B”、7“#1B3F8B”、8“#162252”)
    # 2.
    设置终端推送
    设置终端未知
    设置表格“palete.tmp”
    测试调色板
    未设置的表
    设置终端弹出
    # 3.
    系统('pythonplate.pypalete.dat')
    # 4.
    map(x)=-0.5+(2*(x-0.5))**3+x)/3+0.5
    使用(map($1)):2:3:4设置调色板文件“palete.dat”
    测试调色板