Альтернатива gnuplot с большей точностью по времени - PullRequest
5 голосов
/ 25 января 2011

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

Я рассмотрел несколько альтернатив, но на самом деле мне просто нужно что-то вроде gnuplot, которое может справиться с долями секунды.

Язык программирования, используемый для основного скрипта, - это Python, и хотя я смотрел на matplotlib, он кажется более «тяжелым», чем gnuplot. Поскольку я не всегда буду обновлять графическую сторону, я хочу сделать это как можно проще.

Есть предложения?

Обновление

Я использую это с gnuplot:

set xdata time
set timefmt "%Y-%m-%d-%H:%M:%S"

Однако нет% f, чтобы получить миллисекунды. Например, это работает:

2011-01-01-09:00:01

но мне нужно:

2011-01-01-09:00:01.123456

Ответы [ 4 ]

13 голосов
/ 16 сентября 2013

В соответствии с руководством gnuplot 4.6 в разделе "Спецификаторы времени / даты" (страница 114 PDF-файла gnuplot 4.6) указано:

% S - секунда, целое число 0–60 на выходе, (двойное) на входе

Это означает, что при чтении меток времени, таких как 2013-09-16 09:56:59.412, дробная часть будет включена как часть спецификатора %S. Такая временная метка будет правильно обрабатываться с помощью:

set timefmt "%Y-%m-%d %H:%M:%S"
set datafile separator ","
plot "timed_results.data" using 1:2 title 'Results' with lines

и снабжается такими данными, как:

2013-09-16 09:56:53.405,10.947
2013-09-16 09:56:54.392,10.827
2013-09-16 09:56:55.400,10.589
2013-09-16 09:56:56.394,9.913
2013-09-16 09:56:58.050,11.04
10 голосов
/ 25 января 2011

Вы можете установить формат тиков с помощью

set format x '%.6f'

или (возможно, я не пробовал, так как сейчас я предпочитаю использовать Matplotlib и на моих машинах не установлен gnuplot):

set timefmt "%Y-%m-%d-%H:%M:%.6S"

(запишите указанное количество цифр вместе со строкой формата %S).

Более подробную информацию можно найти в отличном не так часто задаваемых вопросах .

1 голос
/ 26 января 2011

Я изначально неправильно понял вашу проблему.Я думаю, что более точное разрешение формата времени - большая проблема с gnuplot, и, насколько мне известно, она не реализована.

Одним из возможных способов решения проблемы было бы использование awk для преобразования вашей даты в количество секунд.с чем-то вроде

plot  "<awk 'your_awk_one_liner' file1.dat" with lines

, а затем просто сделайте обычный двойной за двойным сюжетом и забудьте, что это было каждый раз вообще (немного похоже на решение Мартина).Боюсь, я не очень хорош с awk, и поэтому не могу помочь с этим битом - хотя эти страницы могут помочь - http://www.gnu.org/manual/gawk/html_node/Time-Functions.html и http://www.computing.net/answers/unix/script-to-convert-datetime-to-seco/3795.html. Использование awk с gnuplot описано здесь: http://t16web.lanl.gov/Kawano/gnuplot/datafile3-e.html.

Затем вы можете построить вторую ось (а не данные) с правильными временами - что-то вроде метода, использованного здесь: Есть ли способ нанести график изменения дня на часовую шкалу времени наось х?

Боюсь, у меня нет времени, чтобы попытаться написать полное решение, но что-то разумное должно быть возможным.

Удачи - держите нас в курсеесли у вас что-то получится - мне было бы интересно.

1 голос
/ 25 января 2011

Я использую gnuplot для тех же целей, мой ввод выглядит так:

35010.59199,100,101
35010.76560,100,110
35011.05703,100,200
35011.08119,100,110
35011.08154,100,200
35011.08158,100,200
35011.08169,100,200
35011.10814,100,200
35011.16955,100,110
35011.16985,100,200
35011,17059,100,200

Первый столбец - это секунды с полуночи, а после запятой - наносекундная часть. Вы можете сохранить это в файле csv и сделать в gnuplut:

set datafile separator ','
plot "test.csv" using 1:3 with lines
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...