我有一个.dat
文件,看起来像这样
1 1.1
2 1.2
3 1.7
4 0.8
5 0.6
1 1.6
2 0.6
3 0.8
...
...
第一列将循环1 to 5
,即标签,第二列将包含我要绘制的数据。
我想为每个plot.png
周期绘制不同的1 to 5
文件。
对第一个1 to 5
说,以下脚本将运行并将png
文件保存为plot1.png
之类的名称
下一个1 to 5
将保存到plot2.png
或者.dat
文件可能就是这个
1 1.1
2 1.2
3 1.7
4 0.8
5 0.6
"plot_xyz"
1 1.6
2 0.6
3 0.8
...
...
"plot_zab"
每个周期后跟随要保存的文件名。
这就是我要一套的方法
reset session
set terminal pngcairo enhanced font "Bebas Neue,25" size 1920,1080
set output 'plot.png'
$DATA << EOD
1 0.7
2 0.6
3 0.5
4 0.3
5 0.9
EOD
stats $DATA nooutput
N = STATS_columns
M = STATS_records
set angles degrees
do for [i=0:M-1] {
stats $DATA every ::i::i using (labelValue=$1) nooutput
if(labelValue==1){
set label sprintf("Cr") at \
posX(i,maxR),posY(i,maxR) center offset char posX(i,1),char posY(i,1)
}
if(labelValue==2){
set label sprintf("St") at \
posX(i,maxR),posY(i,maxR) center offset char posX(i,1),char posY(i,1)
}
if(labelValue==3){
set label sprintf("Bu") at \
posX(i,maxR),posY(i,maxR) center offset char posX(i,1),char posY(i,1)
}
if(labelValue==4){
set label sprintf("To") at \
posX(i,maxR),posY(i,maxR) center offset char posX(i,1),char posY(i,1)
}
if(labelValue==5){
set label sprintf("Pr") at \
posX(i,maxR),posY(i,maxR) center offset char posX(i,1),char posY(i,1)
}
}
do for [j=1:numOfStepsInR] {
set label sprintf("%.1f", j*deltaR) at 0,j*deltaR left offset char 0.5,0 tc rgb '#333333'
}
set parametric
set tr [0:1]
set xr [-1.1*maxR:1.1*maxR]
set yr [-1.1*maxR:1.1*maxR]
plot \
for [i=0:M-1] \
(cos(alpha(i))*(deltaR*(1-t)+t*maxR)),(sin(alpha(i))*(deltaR*(1-t)+t*maxR)) w l ls 42, \
for [i=0:M-1] for [j=1:numOfStepsInR] \
(j*deltaR*cos(alpha(i))*t + (1-t)*j*deltaR*cos(alpha(i+1))),(j*deltaR*sin(alpha(i))*t + (1-t)*j*deltaR*sin(alpha(i+1))) w l ls 42, \
for [i=2:N] $DATA u (posX($0, column(i))):(posY($0, column(i))) w filledcurves closed fc rgb lcolor(i-2) fs border lc rgb lcolor(i-2) lw 2, \
for [i=2:N] $DATA u (posX($0, column(i))):(posY($0, column(i))) w p ps 1.2 pt 7 lc rgb lcolor(i-2)
是否可以从.dat
文件循环生成图?
答案 0 :(得分:1)
在.dat
文件中属于每个图的数据块之间留空行,并使用every
关键字选择一个数据块(请参见gnuplot
Documentation在第92页)。
答案 1 :(得分:1)
如果您有严格的周期(例如5),则可以使用every
,如@jpeg所指出的。
将整个绘图置于do for
循环中,并相应地设置输出文件。像这样(简化)。
reset session
set terminal pngcairo
$DATA << EOD
1 1.1
2 1.2
3 1.7
4 0.8
5 0.6
1 1.6
2 0.6
3 0.8
4 0.8
5 0.6
EOD
stats $DATA nooutput
set parametric
N = STATS_columns
M = STATS_records
C = 5 # Cycle
do for [k=0:floor(M/C)-1] {
set output sprintf("plot%d.png",k)
plot \
for [i=0:M-1] cos(i*t),sin(t),\
for [i=2:N] $DATA u 1:2 every ::k*C::(k+1)*C-1 w p ps 1.2 pt 7 lc i
}
set output