time - Gnuplot:为时间戳数据设置 X 轴标签的起点
问题描述
在 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
它有效,标签的间隔为 2 周,但它们与月初的对齐方式并不令人满意。我看到的 xtics 标签是:06/13、06/28、07/13 等。我想从一个月的第一天开始标记,然后是一个月的 15 号等。我的实际数据从 2019 年开始-06-07。我为 2019-06-01 添加了一个假的第一个条目(见上文),但我得到了相同的标签序列(06/13、06/28 等)。有没有一种方法可以设置第一个 xtics 点的位置(06/01 或 06/15),而无需在数据文件中手动指定“xticslabels”?
解决方案
您可以通过为每个月内第一次出现的“01”或“15”定义过滤函数来自己设置抽动,NaN
否则返回。
编辑:更改测试数据以说明有些月份有 30 天,有些月份有 31 天,而 2020 年 2 月有 29 天。
Edit2:注释后修改代码。
代码:
### 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
结果:
推荐阅读
- c - 在windows下使用c将数据传递给线程的问题
- python - 在python中计算列表中的字符串,然后过滤和匹配
- azure - 如何在 Azure Blob Storage .dotnet core 中存储 2 个同名的 pdf 文件
- ibm-doors - 如何将一行从一个属性复制到 DOOR 中的另一个属性
- excel - 有没有办法根据光标位置在宏中动态选择范围?
- android - 从概念上讲,如何使用 LiveData 和 Room 进行简单的读取/更新循环?
- machine-learning - 深度学习:如果我有一张标有类但不属于该类的图片怎么办
- ios - iOS:将资源(音频)文件包含到应用程序的应用程序文件夹中,而不是添加到包中
- sql - SQL 计数和组合
- java - 我们应该将每个对象都暴露为 spring bean 吗?