3

我目前正在使用带有行堆叠直方图的 gnuplot 绘制一些数据。问题是,在选择了 9 种不同的颜色后颜色开始重复。人们可以在官方 gnuplot 示例中看到这种情况(参见http://gnuplot.sourceforge.net/demo/histograms.html - 示例 4 和 5)

有没有办法告诉 gnuplot 使用更多不同的颜色?

4

2 回答 2

4

没有完全自动化的方法可以做到这一点,但您可以根据需要定义任意数量的线条样式set style line ...,然后使用它们。在这里,我只是使用一个简单的迭代来定义几种颜色:

do for [i=1:20] {
    set style line i linecolor rgb hsv2rgb(0.05*(i-1), 1, 1)
}
set style data histograms
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
plot for [i=1:20] 'mydata.dat' u 2 ls i t 'ls '.i

数据文件只包含值

1 0.1
2 0.2
3 0.3

请注意,该hsv2rgb函数仅从 5.0 开始定义。对于早期版本,您可以使用以下用户定义的函数来获得相同的功能:

rgb2int(r,g,b) = int(255*r)*2**16 + int(255*g)*2**8 + int(255*b)
hsv2rgb(h,s,v) = (s == 0 ? rgb2int(v,v,v) : (HSV_h = h*6.0, HSV_i = int(floor(HSV_h)), HSV_f = HSV_h - HSV_i, HSV_p = v*(1.0 - s), HSV_q = v*(1.0-s*HSV_f), HSV_t = v*(1.0-s*(1.0-HSV_f)), (HSV_i%6 == 0 ? rgb2int(v,HSV_t,HSV_p) : (HSV_i%6 == 1 ? rgb2int(HSV_q,v,HSV_p) : (HSV_i%6 == 2 ? rgb2int(HSV_p,v,HSV_t) : (HSV_i%6 == 3 ? rgb2int(HSV_p,HSV_q,v) : (HSV_i%6 == 4 ? rgb2int(HSV_t,HSV_p,v) : rgb2int(v,HSV_p,HSV_q))))))))

为了更容易,您可以将此代码放入配置文件或第三个脚本中,并在使用该函数之前将其hsv2rgb.gp包含在内。load 'hsv2rgb.gp'

4.6.3 的输出是:

在此处输入图像描述

于 2013-08-09T14:20:40.157 回答
3

有一些比克里斯托夫的回答更自动化的东西。您可以使用调色板:

set palette rgb 7,5,15
unset colorbox
plot 'immigration.dat' using 2:xtic(1) title columnheader(2), \
     for [i=3:22] '' using i lt palette frac i/22. title columnheader(i)

诀窍是,frac根据循环计数器进行定义i。确保除以 a float(在这种情况下22.与示例匹配)以获得调色板的正确分数。
或者,例如 4:

plot 'immigration.dat' using (100.*$2/$24):xtic(1) t column(2), \       
     for [i=3:23] '' using (100.*column(i)/column(24)) lt palette frac i/23.\
     title column(i)  

现在,您只需要决定一个合适的调色板。

于 2013-08-09T14:34:50.450 回答