Gnuplot: установить начальную точку для меток оси X для данных с метками времени - PullRequest
1 голос
/ 18 октября 2019

В Gnuplot я строю временные метки. Данные выглядят так:

2019-06-01 18:23:56, 508.56
2019-06-07 18:23:56, 508.56
2019-06-08 13:00:00, 492.95
...

Я не хочу, чтобы ярлыки xtics были слишком плотными, поэтому я печатаю их только каждые 2 недели:

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set xtics format "%m/%d"
set xtics 3600*24*15
unset mxtics

Работает,метки расположены с интервалом в две недели, но они не очень приятны для начала месяца. Ярлыки xtics, которые я вижу: 06/06, 06/28, 07/13 и т. Д. Я хотел бы начать маркировку с первого дня месяца, а затем с 15-го числа месяца и т. Д. Мои фактические данные начинаются в 2019 году. -06-07. Я добавил поддельную первую запись для 2019-06-01 (см. Выше), но получаю ту же последовательность маркировки (06/13, 06/28 и т. Д.). Есть ли способ установить, где должна быть первая точка xtics (06/01 или 06/15), без необходимости вручную указывать «xticslabels» в файле данных?

1 Ответ

1 голос
/ 18 октября 2019

Вы можете установить свои метки самостоятельно, определив функцию фильтрации для первого появления «01» или «15» в течение каждого месяца, которая возвращает NaN в противном случае.

Редактировать: данные испытаний изменены, чтобы проиллюстрировать, что в некоторых месяцах есть 30, в некоторых - 31, а в феврале 2020 года - 29 дней.

Правка 2: код пересмотрен после комментария.

Код:

### Fixed time step "xtics" on 01 and 15 of each month
reset session

myTimeFmt = "%Y-%m-%d %H:%M:%S"

# create some test data
set samples 181
set table $Data
    plot [0:1] '+' u (a=strftime(myTimeFmt, time(0)+$1*3600*24*180)):(a[9:10]) w table
unset table

set grid xtics, ytics

flag=0
myTic(s) = (s[9:10] eq "01") && (flag==0 || flag==15) ? \
    (flag=1, strftime("%m/%d",strptime(myTimeFmt,s))) : \
    (s[9:10] eq "15") && (flag==0 || flag==1) ? \
    (flag=15, strftime("%m/%d",strptime(myTimeFmt,s))) : NaN

set xdata time
set timefmt myTimeFmt
set xrange["2019-10-01":"2020-04-30"]

plot $Data u (timecolumn(1,myTimeFmt)):3: \
        xtic(myTic(strftime(myTimeFmt,timecolumn(1,myTimeFmt)))) w lp pt 7 notitle, \
### end of code

Результат:

enter image description here

...