【问题标题】:How to increase the number of color in gnuplot?如何增加gnuplot中的颜色数量?
【发布时间】:2021-05-17 05:16:44
【问题描述】:

我有一个包含 16 个数据块的文件,由两个空行分隔,因此我可以通过选择每个块的索引来绘制每个块。我想做的是自动为每个数据块赋予不同的颜色,所以我尝试了:

plot "data.csv" using 2:1:-2 lc var 

问题是所有 16 个数据块没有足够的颜色,即某些数据集具有相同的颜色,而我想自动为每个数据块关联一个唯一的颜色?有没有办法做到这一点?

【问题讨论】:

    标签: matplotlib colors data-visualization gnuplot color-palette


    【解决方案1】:

    通常的方法是从调色板中取出 N 个切片。您可以通过多种不同方式定义调色板,但只要调色板中没有颜色重复,此方法将为您提供 N 种不同的颜色。

    您专门询问了 16 种颜色,因此使用默认调色板的最小示例是:

    N = 16
    plot for [i= 0 : N-1] "data.csv" index i using 2:1 lc palette frac (i * 1./N) 
    

    【讨论】:

      【解决方案2】:

      您可以通过多种方式选择颜色,无论是否自动。

      linecolor(或lc)说明符可以采用

      • 一个整数,用于选择一种内置线型及其 相关颜色,
      • 字符串形式的颜色名称,例如“blue”(在交互式 gnuplot 会话,请执行show colors 以查看可用颜色的完整列表 名称),
      • 一个颜色规格(这可以有多种形式,做help colorspec更多 详情)。

      我采取了我能想到的最懒惰的方法,就是随机选择颜色!

      我向lc 提供了以下形式的颜色规范:

      rgbcolor <integer val>  # integer value representing AARRGGBB
      

      在下面的脚本中,&lt;integer val&gt; 是随机生成的, 在 [000000, FFFFFF] 范围内,其中 FFFFFF(基数 16)= 16**6-1(基数 10)= 16777215(基数 10)。 这会在所有可能的颜色集中随机选择颜色 gnuplot 支持,忽略透明度(AARRGGBB 中的 AA)。

      unset key
      set xrange [0:10]
      
      seed = 4
      x = rand(seed)
      N = 16**6-1
      
      plot for [i=1:16] x*i lc rgbcolor rand(0)*N
      

      rand(0) 给出一个介于 0 和 1 之间的数字,因此 rand(0)*N 给出一个介于 0 和 16**6-1 之间的数字。

      由于种子是固定的(我选择了 4 个),随机数序列和集合 每次运行脚本时颜色都是相同的。你可以试试 不同的种子,直到所有的线条颜色看起来都足够不同。

      使用上面的脚本,我得到了这个情节:

      【讨论】:

        猜你喜欢
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多