Мне нужна помощь для создания графа с gnuplot - PullRequest
0 голосов
/ 27 декабря 2018

У меня проблемы с выяснением того, как использовать 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 я хочу пропускную способность в Мбит / с.

Я что-то пробовал, но мне не хватает информации / знаний, чтобы завершить это.

Пример:

  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 голосов
/ 28 декабря 2018

Вот вариант симпатичного решения из @theozh выше:

Сначала используйте awk для переформатирования входных данных:

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 

С помощью этих команд построения:

set term png
set output "out.png"
set timefmt '%m/%d/%y %H:%M:%S'
set xdata time
set xtics rotate
set datafile separator ","
plot "out.txt" using 1:2 with linespoint

вы получите такой результат:

plot

0 голосов
/ 28 декабря 2018

, как предложил @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

...