是否可以在gnuplot中使用多槽内的do循环?

时间:2013-09-12 17:25:27

标签: loops colors gnuplot

我需要创建一个包含多个子图的图形,而在每个子图中我需要绘制多条线。每行必须有不同的颜色。 (如果每30-40行重复一次颜色就可以了。)

例如:(我想要8个子图)

set multiplot layout 2, 4

对于第一个子图我可以执行以下操作

plot for [i=2:101] 'mydata.txt' u 1:i w line notitle lw 2

将绘制第一个子图中的100行

plot for [i=1022:201] 'mydata.txt' u 1:i w line notitle lw 2

在第二个面板中添加另一组行等。

这个解决方案的问题在于,子图中的每个单独的线不仅获得不同的颜色,而且还获得不同的线条样式,有些是实体,有些是虚线,每个都有不同的划线图案等。 有没有办法使用独特的线型,例如所有连续的线条和不同的颜色?

过去我发现了以下解决方法,适用于单个情节

rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b)
set multiplot

do for [i=2:201] { 
   rr = 255*rand(0)
   gg = 255*rand(0)
   bb = 255*rand(0)
   plot 'moredata.inp' u 1:i:(rgb(rr,gg,bb)) w line notitle lt 1 lc rgb variable lw 2
}

但是我无法替换[i = 2:101]"使用do循环,因为每个子图的结果是一行。

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

要仅使用实线,请使用

set termoption solid

为了迭代线条颜色,您可以使用lc variable(不使用rgb!)。在这种情况下,最后一列用作linetype索引。如果您想要其他颜色的线型,可以使用set linetype ...。如果您使用set style increment user,则索引会引用linestyles

或者您可以使用lc palette并定义合适的调色板,例如Gnuplot repeats colors in rowstack histograms。我认为这可能是最好的选择,因为你需要很多颜色:

set palette model HSV defined ( 0 0 1 1, 1 1 1 1 ) # rainbow palette
plot for [i=2:101] 'mydata.txt' u 1:i lc palette frac (i/101.0) w line notitle