我需要使用gnuplot创建图形的帮助

时间:2018-12-27 18:58:08

标签: linux graph gnuplot bandwidth linuxmint

我很难弄清楚如何使用gnuplot。我正在尝试制作随时间变化的带宽图。我有一个脚本,可将我的乐队,时间和日期每分钟保存到一个log.txt文件中 示例:

47.05 
18:59:40 
12/27/18
47.02 
19:01:02 
12/27/18
47.04 
19:02:25 
12/27/18
46.12 
19:03:47 
12/27/18
46.19 
19:05:08 
12/27/18

我想使用该log.txt文件制作图形。 在x轴上,我想要时间,在y轴上,我想要以Mbps为单位的带宽。

我尝试了一些尝试,但是我错过了完成该任务的信息/知识。

示例:

  1 #!/usr/bin/gnuplot
  2 reset
  3
  4 set xdata time
  5 set timefmt "%Y-%m-%dT%H:%M:%S"
  6 set format x "%T"
  7
  8 set xlabel "Tijd"
  9 set ylabel "Bandbreedte"
 10
 11 set title "Een grafiek van de bandbreedte in functie van de tijd"
 12
 13 plot "/home/student/log.txt" using 1:2

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

就像@Kamil Cuk所建议的那样,最好使用其他格式的数据。您可能想要更改记录程序的输出(如果可以)或使用其他工具重新格式化数据。

但是,您也可以使用一些(有点奇怪的)解决方法来用gnuplot重新格式化数据。 使用gnuplot可以更轻松地处理如下所示的格式。

12/27/18 18:59:40 47.05
12/27/18 19:01:02 47.02 

重新格式化下面的脚本是这样的,然后您就可以轻松地绘制它。

### reformat some logging data
reset session

$Data <<EOD
47.05 
18:59:40 
12/27/18
47.02 
19:01:02 
12/27/18
47.04 
19:02:25 
12/27/18
46.12 
19:03:47 
12/27/18
46.19 
19:05:08 
12/27/18
EOD

# reformat your input data
a = b = c = NaN
set table $Data2
    plot $Data u (c=b,b=a,a=stringcolumn(1),a):(b):(c) with table
unset table
set table $Data3
    plot $Data2 u (stringcolumn(1).' '.stringcolumn(2)):3 every 3::2 with table
unset table

set xdata time
set xtics rotate
set format x "%H:%M"
set timefmt "%m/%d/%y %H:%M:%S"

plot $Data3 u 1:3 w lp lt 7 lc rgb "red"
### end of code

这将导致:

enter image description here

答案 1 :(得分:1)

下面是@theozh的不错的解决方案的变体:

首先使用awk重新格式化输入数据:

404

然后数据如下:

awk '{a=$0;getline;b=$0;getline;printf "%s %s,%s",$1,b,a;print ""}' in.txt > out.txt

使用以下绘图命令:

12/27/18 18:59:40 ,47.05 
12/27/18 19:01:02 ,47.02 
12/27/18 19:02:25 ,47.04 
12/27/18 19:03:47 ,46.12 
12/27/18 19:05:08 ,46.19 

您得到以下结果:

plot