直方图中每第n个框的Gnuplot颜色

时间:2016-02-04 13:01:56

标签: gnuplot histogram

我正在绘制大量的条形图,因此我只标记每个第n个xtic(如.dat文件中所示"")。以下是我输入的前15行" .dat"文件:

1 150
" " 260
" " 340
" " 410
5 270
" " 280
" " 260
" " 370
" " 220
10 230
" " 340
" " 300
" " 200
" " 240
15 160

绘制此数据的效果很好。但是,在我的实际.dat文件中,我有大约500k的值(500k框)。因此,我想为每个10k的盒子涂上一定的颜色(或者在上面的例子中,每隔5个颜色)。这是使用的代码:

set terminal postscript eps color
set output "genetic.eps"
set ylabel "Number of Exons"

set style fill solid 1.0 noborder

plot "genes.dat" using 2:xticlabels(1) smooth frequency with boxes notitle

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个

set ylabel "Number of Exons"
set style fill solid 1.0 noborder
plot "test" using ($0+1):($2)  w boxes lc 'blue' t '',\
   'test' u (($0*5)+5):($2):(1) every 5::4 w boxes lc 'red' t ''

它为您提供了以下输出enter image description here

$ 0代表行号(从0开始)
every 5::4代表every 5th line starting after line 4
当我们不使用每一条线时,我们必须防止条在整个宽度上伸展。我们可以通过提供第三个坐标来实现:x宽度:(1)

答案 1 :(得分:2)

在你的情况下,平滑的频率实际上并没有做任何事情(只有在多个点具有相同的x坐标时才有效,但是如果没有指定一个,则默认使用行号)。

我们可以获得平滑频率选项的干扰并使用可变线条颜色。如果我们希望将每个第5个框设置为红色,而将其他框设置为蓝色,则可以执行

plot "genes.dat" u 0:2:(int($0)%5==0?(255<<16):255):xticlabels(1) with boxes lc rgbcolor variable

enter image description here

在绘图规范中,我们使用

  • 0 - 0列是行号,这将是x值
  • 2 - 第二列将是y值
  • (int($0)%5==0?(255<<16):255)
    • 确定行号是否为5
    • 的倍数
    • 如果是,则将颜色设置为255移位16位(全红)
    • 如果不是,请将颜色设置为255(全蓝)
  • xticlabels(1) - xtic标签

lc rgbcolor variable表示使用rgbcolor值(基于第三列的RRGGBB格式的24位整数)设置线条颜色。

有关详细信息,请参阅help linecolor

在提供的示例中,我首先运行set yrange[0:*]以避免从第一个框中删除默认的yrange值计算。

行号从0开始,0可以被5整除,第一个框为红色,第六个为红色,依此类推。如果我们希望将第5个,第10个等框设置为红色,请在plot命令的颜色规范中使用int($0+1)

注意:这一切都适用于gnuplot 5.早期版本不支持位移,因此我们必须将shift表达式替换为计算的实际结果,在本例中为16711680。 / p>