gnuplot 学习小计4

时间:2021-09-14 23:44:19

本次要点:

用同一个文件画多条曲线。

replot命令,使用相同文件的渐变做法,双纵坐标。


1,使用相同文件

如果在一条绘制命令中使用逗号绘制多条曲线,那么按照标准语法,我们是需要每次都指定绘图所使用的文件的。然而实际使用中在一条绘图命令中绘制的多挑曲线往往都是来自同一个文件,因此gnuplot规定:在绘制非第一条曲线时可以使用两个单引号来简略表示文件路径,它表示使用上一条绘制命令中使用的文件。

另外,这个特性还不止可以用在逗号隔开的多个子绘制语句,还可以用于多个plot命令之间,replot命令。

例如:

plot 'vtb_s600_12.txt' using 2:3 w l
replot '' using 2:($4/3) w l 
或
plot 'vtb_s600_12.txt' using 2:3 w l, '' using 2:($4/3) w l 

本质上可以理解为,每次我们使用“ ‘xxxx’ ”指定数据文件,就修改了当前的默认文件。而“ '' ”是使用默认文件的意思。

2,replot命令

replot命令的使用和plot几乎一模一样。只是它的效果是不清空已有图像的,而是将新的图像画在旧的图上面(实际实现上不是这样)。
另外它还可以单独使用,这多用于我们修改了title,xlabel之类的东西,而又不想重输入命令。

其实它的实现本质是一个字符串拼接。它找到上一个plot命令,将它到当前未知的所有绘制语句(plot语句和replot语句)通过逗号形式连接起来,并附加上本条命令。也就是说每次执行replot,都是使用当前配置重画了一个新图,而这个新图是并置了许多子绘制语句。

3,双纵坐标

在同一个图片中绘制一条以上的曲线的时候,很可以因为两者的纵坐标范围不一样,而导致某一条曲线被压缩地很扁平。而手动调节比例和偏移虽然可以将它们好的结合在一起,但是这样非常麻烦,会浪费大量的时间。
gnuplot支持双纵坐标(双横坐标也支持),我们可以在图的两边分别使用不同的标度,一切放缩的工作就交给gnuplot了。
做法:
首先很明显为了说明哪条曲线对应哪个标度,我们需要指定两个纵坐标的label。两个纵坐标分别叫做y和y2。
命令如下:
set ylabel "volume"
set y2label "travel time"
这样的话,y2是没有标度的,我们需要使用命令
set y2tics
来为y2轴显示标度。
并且需要把y轴在右侧的镜像标度取消掉,否则右侧的y2轴会有两套标度点同时出现:
set ytics nomirror
然后需要在绘制命令中使用axis关键字指定绘制到哪个轴:
例如:
plot 'vtb_s600_12.txt' u 2:3 w l axis x1y1 t "average volume", '' u 2:4 w l axis x1y2 t "average travel time"