首页 > 解决方案 > 如何使用 Gnuplot 5.2 制作多轴图?

问题描述

我有这个数据:

2019-11-11;/dev/hd1/;10
2019-11-11;/dev/hd2/;12
2019-11-11;/dev/hd3/;14
2019-11-11;/dev/hd4/;16
2019-11-11;/dev/hd5/;18
2019-11-11;/dev/hd6/;20
2019-11-12;/dev/hd1/;13
2019-11-12;/dev/hd2/;15
2019-11-12;/dev/hd3/;17
2019-11-12;/dev/hd4/;19
2019-11-12;/dev/hd5/;21
2019-11-12;/dev/hd6/;23
2019-11-13;/dev/hd1/;16
2019-11-13;/dev/hd2/;19
2019-11-13;/dev/hd3/;21
2019-11-13;/dev/hd4/;24
2019-11-13;/dev/hd5/;23
2019-11-13;/dev/hd6/;26

我可以用 excel 制作多轴图:

在此处输入图像描述

但是当我尝试使用 Gnuplot 5.2 时,我没有成功......

你能告诉我怎么做吗?

标签: linuxgraphgnuplot

解决方案


这里的人们希望您展示一些代码并努力解决您的问题,但是,我假设您是 gnuplot 初学者,我不得不承认,使用 gnuplot 从提供的数据中获得所需的绘图并不简单(除非有更简单的方法我没有想到。)我会循环数据并使用三元运算符通过函数对其进行过滤。当然还有改进的余地。检查help ternary以及help timecolumn其他关键字以获取更多详细信息。

代码:

reset session

$Data <<EOD
2019-11-11;/dev/hd1/;10
2019-11-11;/dev/hd2/;12
2019-11-11;/dev/hd3/;14
2019-11-11;/dev/hd4/;16
2019-11-11;/dev/hd5/;18
2019-11-11;/dev/hd6/;20
2019-11-12;/dev/hd1/;13
2019-11-12;/dev/hd2/;15
2019-11-12;/dev/hd3/;17
2019-11-12;/dev/hd4/;19
2019-11-12;/dev/hd5/;21
2019-11-12;/dev/hd6/;23
2019-11-13;/dev/hd1/;16
2019-11-13;/dev/hd2/;19
2019-11-13;/dev/hd3/;21
2019-11-13;/dev/hd4/;24
2019-11-13;/dev/hd5/;23
2019-11-13;/dev/hd6/;26
EOD

set colorsequence classic
set datafile separator ";"
set datafile missing NaN
myTimeFmt = "%Y-%m-%d %H:%M"
set timefmt myTimeFmt

set xdata time
set xtics 3600*24           # one tic per day
set format x "%d.%m.%Y"
set xrange["2019-11-10 20:00":"2019-11-13 04:00"]
set yrange[8:28]
set ytics 5
set grid ytics
set key top left

myFilter(c,n) = strcol(c)[8:8] == n ? $3 : NaN

plot \
     for [i=1:6] $Data u (timecolumn(1)):(myFilter(2,i)) w lp pt 7 title sprintf("/dev/hd%d/",i), \
     for [i=1:6] $Data u (timecolumn(1)):(myFilter(2,i)):3 w labels offset 0,0.7 notitle
### end of code

结果:

在此处输入图像描述


推荐阅读