此CSV输入的Gnuplot条形图

时间:2015-06-16 21:20:39

标签: bash gnuplot

我有csv文件data.dat,例如这些值:

url3 % (year, month, day)

我需要将条形图绘制成pdf。每个图表的每个数据都以标题#W1,#W2 ....

开头

我试过这个剧本:

#W=1
0;sqlite;11500
1;hsql;14550
2;h2;17550
#W=2
0;sqlite;11000
1;hsql;13800
2;h2;16500
#W=3
0;sqlite;11000
1;hsql;13800
2;h2;16500
#W=4
0;sqlite;11000
1;hsql;13800
2;h2;16500 

给出这个输出: enter image description here

如何从一个数据文件中创建更多图形(本例中为4但可能更多或更少),每个图形分别在前一个图形下?

修改 每个图形可以具有不同数量的条形,而不仅仅是前面示例中的三个条形。文件data2.dat也可能如下所示:

 cat << __EOF | gnuplot -persist
 set terminal pdf
 set output 'out.pdf'
 set datafile separator ";"
 set boxwidth 0.5
 set style fill solid
 plot "data2.dat" using 1:3:xtic(2) with boxes
__EOF

当每个图形有3个条形图但是我不知道如何更改它来绘制更多或更少的条形图时,来自Miguel答案的这个剧本可以正常工作。

#W=1
0;sqlite;11500
1;hsql;14550
2;h2;17550
3;derby;8500
4;sqlite;13550
5;h2;19250
#W=2
0;sqlite;11000
1;hsql;13800

如果有可能我希望根据每个数据集的标题值(W = 1,W = 2 ......)来设置图表

1 个答案:

答案 0 :(得分:1)

您可以使用multiplotplot命令的外部循环,也可以在plot命令内进行迭代,具体取决于您要实现的目标。 every选项允许您从文件中选择要绘制的内容。

使用multiplot

set multiplot layout 2,2
set datafile separator ";"
set boxwidth 0.5
set style fill solid
do for [i=0:3] {
plot "data2.dat" using 1:3:xtic(2) every ::(i*3)::(i*3+3) with boxes
}

enter image description here

在一个地块中:

set datafile separator ";"
set boxwidth 0.5
set style fill solid
plot for [i=0:3] "data2.dat" using 1:3:xtic(2) every ::(i*3)::(i*3+3) with boxes

enter image description here

在您的情况下,由于您文件中的最后3个块是相同的,因此您无法在第2个和第3个块上方进行可视化,这些块仍然隐藏在第4个块之下。

要让图表再次在独立文件中绘制,您只需要循环,但现在更改每次迭代的文件名:

set terminal pdf
set datafile separator ";"
set boxwidth 0.5
set style fill solid
do for [i=0:3] {
set output 'out'.i.'.pdf'
plot "data2.dat" using 1:3:xtic(2) every ::(i*3)::(i*3+3) with boxes
}

上面的代码会生成文件out0.pdfout1.pdf