我有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
给出这个输出:
如何从一个数据文件中创建更多图形(本例中为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 ......)来设置图表
答案 0 :(得分:1)
您可以使用multiplot
和plot
命令的外部循环,也可以在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
}
在一个地块中:
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
在您的情况下,由于您文件中的最后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.pdf
,out1.pdf
等