У меня была похожая проблема.Хотя вы не показали, как именно вы делали сюжет.Я хотел установить диапазон, используя временные метки, и нашел что-то неожиданное.,,поэтому, несмотря на свою старую, я думаю, что стоит ответить на этот вопрос.
Две полезные вещи:
Вы можете построить график с xrange, установленным на [*. *], а затем «показать xrange».'чтобы узнать, какое внутреннее представление xrange используется вашим gnuplot.
Вы можете использовать () в gnuplot для вставки вычислений и вызовов функций.
Ответ # 1 Вы строите график с использованием временной колонки?До gnuplot 4,7 внутренние времена gnuplot отслеживались относительно 1 января 2000 года, а не эпохи unix 1 января 1970 года.Ответ зависит от того, какую версию gnuplot вы используете?Вы можете использовать () в gnuplot для выполнения функций вызова или выполнения вычислений.Вы можете вызвать дату команды оболочки, чтобы получить метку времени.Так .,,
set xrange [(system("date -d 'now' +%s")-2592000):(system("date -d 'now' +%s"))]
show xrange
set xdata time
set xrange [ "1431007547" : "1431008547" ] noreverse nowriteback
До gnuplot 4.7 вы также должны вычесть 946684800 секунд из всех временных отметок.Фактически я обнаружил, что около 1893370441 секунд = ~ 60 лет - это значение, которое я должен вычесть с моей версией gnuplot (4.6).Найдите смещение метки времени, выполнив график с данными метки времени, не устанавливая xrange, а затем выполните 'show xrange' и вычислите смещение.
Поэтому определите используемое смещение и установите xrange следующим образом:
####################################################################
## 1893456000 = 60 years seems to be the offset gnuoplot is using.##
## or is it 1893370441 ? yeah it seems to be a bit short of 60 years.
## I believe 946684800 should be the offset prior to 4.7. ##
####################################################################
TIMEOFFSET=946684800
TIMEOFFSET=1893370441
set xrange [(system("date -d 'now' +%s")-2592000-TIMEOFFSET):(system("date -d 'now' +%s")-TIMEOFFSET)]
Ответ # 2 Действительно ли ваш xrange находится в строках файла данных?(т.е. не используя timecolumn).В этом случае установите свой xrange в терминах строк данных.Если ваши данные периодические, вы можете рассчитать, сколько строк назад = определенный период времени.
Я использую эту версию gnuplot:
Version 4.6 patchlevel 1 last modified 2012-09-26
БОЛЬШЕ деталей и исследования ...
Сделайте базовый график ваших данных:
set xdata time
set timefmt "%s"
set timefmt x "%s"
set format x "%H:%M"
plot "lollo.data" using 1:2, "lollo.data" using 1:3
Хорошо, теперь установите простой xrange от первой до последней отметки времени в данных.
set xrange [1330347541:1330351141]
plot "lollo.data" using 1:2, "lollo.data" using 1:3
^
all points y value undefined!
Вау !?В самом деле?Что не так с этим?Давайте сделаем 'show xrange', чтобы увидеть, что gnuplot считает диапазоном.
show xrange
set xdata time
set xrange [ "1330347541" : "1330351141" ] noreverse nowriteback
Это выглядит хорошо.Давайте установим xrange на *: * (с чего начинается gnuplot (вы также можете сделать 'set xrange restore' НО, который устанавливает его на [-10: 10] - не то, что нам нужно)), сделайте заговор и ТО покажите xrange.
set xrange [*:*]
plot "lollo.data" using :2, "lollo.data" using :3
show xrange
set xdata time
set xrange [ * : * ] noreverse nowriteback # (currently ["0":"4"] )
Хмммн.0: 4 !!Интересно.Похоже, xrange работает со строками данных не вовремя.Так.Это твоя проблема?Предполагая, что xrange будет работать в метках времени, а не в строках?Зная это, вы сможете установить свой xrange в терминах строк.== Ответ # 2
Сейчас.Давайте построим данные, используя временной столбец.
set xrange [*:*]
plot "lollo.data" using (timecolumn(1)):2, "lollo.data" using (timecolumn(1)):3
show xrange
set xdata time
set xrange [ * : * ] noreverse nowriteback # (currently ["-563022900":"-563014800"] )
Ой!-563022900!?Отрицательная отметка времени.Интересно.Итак, странность / особенность вычисления целой отметки времени в этой версии gnuplot?
Давайте попробуем установить простой xrange от первой до последней отметки времени в данных и графике с использованием timecolumn.
set xrange [1330347541:1330351141]
plot "lollo.data" using (timecolumn(1)):2, "lollo.data" using (timecolumn(1)):3
^
all points y value undefined!
Это неэто не так.Понятно, если он работает с внутренними отрицательными временными метками.
Давайте установим отрицательный диапазон LESS на один месяц секунд, используя () для вычисления окружения:
set xrange [(-563014800-2592000):-563014800]
plot "lollo.data" using (timecolumn(1)):2, "lollo.data" using (timecolumn(1)):3
Это работает.Для меня.Гнуплот 4.6.Но откуда взялся -563014800 !?
$ date -d @1330347541
Mon 27 Feb 12:59:01 GMT 2012
$ dc -e '1330347541 16o p'
4F4B7E15
### ??? I didn't find any hex relation - looking for evidence of integer calc overflow/sign calc errors
# What offset
$ dc -e '0 1330347541 - 563022900 - p'
-1893370441
# taking a timestamp from today (7 march 2015) and doing a plot I saw gnuplot used xrange with -462448800 . . .
$ dc -e '0 1431000097 - 462448800 - p'
-1893448897
Ха!Это примерно то же самое.-1893448897 = ~ -1893370441 Это примерно 60 лет.ТАК.Смещение 60 лет используется.В моей версии gnuplot. ИНТЕРЕСНО. и ДА.Так что мне нужно вычесть около 1893456000 секунд для преобразования во внутреннюю временную метку gnuplot.На самом деле 1893370441 кажется ближе к тому, что нужно.
В другом месте в эпоху интернета говорят, что эпоха gnuplot наступила в 2000 году. Это должно означать, что следует использовать смещение 946684800.Но, похоже, сейчас это не так.
YMMV.Похоже.
Используя это смещение, вы можете установить xrange от месяца назад до настоящего момента так: == Ответ # 1
TIMEOFFSET=1893370441
set xrange [(system("date -d 'now' +%s")-2592000-TIMEOFFSET):(system("date -d 'now' +%s")-TIMEOFFSET)]
И как / почемуэто дело в gnuplot?
От: http://gnuplot.10905.n7.nabble.com/30-year-time-offset-reading-nonuniform-matrix-s-input-td17231.html«Извините, я думаю, что это был, вероятно, я. Я тогда не использовал unix, поэтому 2000 год казался таким же произвольным, как и 1970.
Изначально не предполагалось, что он все равно будет виден пользователю, но этоПозже было обнаружено, что вы можете использовать числа, а не строки в таких вещах, как установка диапазонов для данных времени.
Я думаю, что я также имел в виду, что, поскольку время хранилось как реальное число, носить его было нехорошобольшое смещение, поскольку это ограничивало разрешение, доступное для небольших чисел. Но я думаю, что это, вероятно, не имеет значения на практике.
Дейв D "