Дата/время Gnuplot по оси x
У меня есть быстрый вопрос относительно даты и времени по оси X в GNUPLOT. Я позволю коду говорить
Это мои данные:
#Time Data in Data out
"2013-07-22 15:59:00" 6286 3730
"2013-07-22 15:58:00" 10695 14589
"2013-07-22 15:57:00" 17868 26464
"2013-07-22 15:56:00" 18880 34012
"2013-07-22 15:55:00" 19206 41192
"2013-07-22 15:54:00" 20365 43218
"2013-07-22 15:53:00" 18459 39298
"2013-07-22 15:52:00" 3420 4686
"2013-07-22 15:51:00" 3256 4942
И это код, который генерирует график:
gnuplot> set title "Data usage over the last 24 hours"
gnuplot> unset multiplot
gnuplot> set xdata time
gnuplot> set style data lines
gnuplot> set term png
Terminal type set to 'png'
Options are 'nocrop font "arial,12" fontscale 1.0 size 640,480 '
gnuplot> set timefmt "%Y-%m-%d %H:%M:%S"
gnuplot> set format x "%m-%d\n%H:%M"
gnuplot> set xlabel "Time"
gnuplot> set ylabel "Traffic"
gnuplot> set autoscale y
gnuplot> set xrange ["2013-07-21 16:00":"2013-07-22 16:00"]
gnuplot> set output "datausage.png"
gnuplot> plot "C:\\Users\\blah\\Desktop\\plot.tmp" using 1:2 t "inbound" w lines, "C:\\Users\\blah\\Desktop\\plot.tmp" u 1:3 t "outbound" w lines
^
all points y value undefined!
Проблема в промежутке между date
и time
по оси X? Если нет, то как вы думаете, может быть проблема?
Ответы
Ответ 1
Gnuplot фактически не ожидает, что данные времени будут в кавычках, поэтому вы должны сказать это:
set timefmt '"%Y-%m-%d %H:%M:%S"'
Вы можете поместить двойные кавычки в одинарные кавычки, как я здесь, или избежать кавычек:
set timefmt "\"%Y-%m-%d %H:%M:%S\""
то же самое относится к вашей спецификации xrange
:
set xrange ['"2013-07-21 16:00"':'"2013-07-22 16:00"']
Если вы удаляете кавычки в файле данных, вы можете использовать форматирование, которое вы изначально имели, за исключением того, что номера столбцов будут сдвинуты на 1, поскольку дата занимает два столбца без кавычек.
Ответ 2
Кажется, что ответ да, проблема была в пробеле.
делать это, кажется, исправить:
set datafile separator ","
и фактическое разделение времени и данных запятыми.
Ответ 3
Насколько я понял, порядок инструкций важен, я мог себе это позволить, используя:
-
timefmt
для данных и должно быть одинаковым для xrange -
format x
только для отображения
set xdata time
set timefmt "%Y%m%dT%H%M%S"
set format x "%Y-%m-%d\n%H:%M:%S"
# or with bash variables: set xrange ["$l_start_dt":"$l_end_dt"]
set xrange ["20190620T000000":"20190628T000000"]