在 Gnuplot 中绘制垂直线以表示一维数据

Plot vertical lines in Gnuplot to represent one dimensional data

我正在尝试使用 Gnuplot 绘制 TCP 连接的带宽增长。

我有 2 个日志文件,一个有带宽,另一个有发生丢包的时间戳。我想在与带宽相同的图表中表示数据包丢失,可能在 X 轴(时间)上有一条垂直线。

请多多指教!

作为一个非常粗略的例子,这里是文件格式。

Bandwidth.dat

0.001 2
0.002 3
0.003 5
0.004 8

Packet_Drop.dat

0.006
0.12
0.39

所需情节:

抱歉,不知道如何快速制作更好的图表!

作为一种选择,您可以使用 impulses 绘图样式,它绘制从 y=0 到给定值的垂直线:

max = 10
plot 'Bandwidth.dat' using 1:2 with lines linecolor rgb 'black',\
     'Packet_Drop.dat' using 1:(max) with impulses linecolor rgb 'red'

这个选项的缺点是,你必须知道y轴的最大值。你可以得到这个,例如通过绘制到 unknown 终端,然后使用 GPVAL_Y_MAX 值:

set terminal push # save current terminal
set terminal unknown
plot 'Bandwidth.dat' using 2
set terminal pop # restore terminal

plot 'Bandwidth.dat' using 1:2 with lines linecolor rgb 'black',\
     'Packet_Drop.dat' using 1:(GPVAL_Y_MAX) with impulses linecolor rgb 'red'

(无法使用 stats 获取 自动缩放的 轴的最大值。)

或者,您可以将数据文件中的 x 值读入字符串并遍历单词并相应地设置一些箭头。在 Linux 上,使用

packet_drop = system('cat Packet_Drop.dat')
set for [w in packet_drop] arrow from first w, graph 0 to first w, graph 1 linecolor rgb 'red' nohead

plot 'Bandwidth.dat' using 1:2 with lines lc rgb 'black'

在 Windows 上它应该与

一起工作
packet_drop = system('type Packet_Drop.dat')

并且在使用 4.6 版本时需要使用 wgnuplot_pipes.exe