【问题标题】:Gnuplot - defining spacing of color palette with a functionGnuplot - 使用函数定义调色板的间距
【发布时间】:2013-11-10 06:44:54
【问题描述】:

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

设置 cbrange [0:1]

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

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

我发现我可以在对数刻度中使用调色板:

设置日志cb

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

【问题讨论】:

    标签: colors gnuplot color-palette


    【解决方案1】:

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

    考虑一下,您有一个映射函数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
    

    在您的情况下,您可以:

    1. 根据需要定义调色板(例如使用set palette defined ...
    2. 将调色板写入外部数据文件。这会写入一组“红色”、一组“绿色”、一组“蓝色”和一组 NTSC 灰度值。
    3. 重新排列数据文件以对set palette file 有用。这里我使用下面的python脚本palette.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')
      
    4. 定义一个合适的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
    

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 2015-02-09
      • 2019-07-03
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多