Как мне заставить gnuplot прочитать мой формат времени и сохранить его в порядке входного файла? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь заставить gnuplot (а) прочитать мой формат ввода времени и (б) отобразить время в порядке входного файла.Я пытаюсь отобразить изменения значения за последние 24 часа, начиная с 18 UTC.

Не похоже, что:

set xdata time

set timefmt "%H%M"

Ему также нравится отображать мой xaxisзначения от 0000 UTC до 2300 UTC и сбрасывает начальные нули.Смотрите ниже для входного файла.Я бы хотел, чтобы новейшие данные (в данном случае 1800UTC) были на правой стороне моего оси.Спасибо.

1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21

и так далее ...

1 Ответ

0 голосов
/ 04 января 2019

предложение Майкла О. использовать полную дату с указанием года, месяца, дня, возможно, является наиболее универсальным способом решения вашей темы.Однако, если вы не можете или не хотите изменять свои данные, вы можете использовать следующее:

Решение 1: добавить дополнительный день (или 86400 секунд), когда данные проходят «0000»

Решение 2: используйте первый столбец в качестве метки строки (ось X будет корректно масштабироваться, только если ваши временные шаги постоянны).Для забавы я добавил возможность отображать только часть меток.

### time "without" date
reset session

$Data <<EOD
1900 23
2000 22
2100 22
2200 22
2300 22
0000 22
0100 22
0200 21
0300 21
0400 21
0500 21
EOD

set multiplot layout 2,1

    # solution 1: add extra day
    set xdata time
    set timefmt "%H%M"
    set format x "%H%M"
    extraday = 0
    plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

    # solution 2: use timecolumn as xticlabel
    Modulo(x,n) = x - floor(x/n)*n
    plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

unset multiplot
### end of code

... приведет к:

enter image description here

...