gnuplot xtic 标签错位日期

gnuplot xtic labels mispositioning with dates

通常设置 x 抽动没有问题,但这个解决方案对我来说是个挑战。

沿着每日时间序列绘制一些值,因此使用命令

set xdata time  
set timefmt "%m/%d/%Y"  # the incoming dates are like 06/19/2016  
set format x "%b %Y"    # I want the tics to be like Jun 2016

我在情节中有一个箭头作为标记

set arrow 1 from "10/15/2016", 0 to "10/15/2016", 4  

...所以我在 2016 年 10 月 15 日有一条垂直线。

但是对于我的 xtics 命令...

set xtics "10/15/2016", 2628000

...我应该在 10 月 15 日 开始并大约在每个月的 15 日进行 xtics。问题是,第一个 xtic 显示的是 10 月 1 日所在的位置,而不是第 15 个 。随后,间隔确实是一个月左右,但都接近每个月的第一天,而不是第十五天。

这个箭头只是为了给我一个日期10月15日的视觉标记,它的命令使用与xtics命令相同的格式。在我能想到的每一种配置都失败了一个小时之后,是时候去外面看看新的眼睛了。

除了对原始问题的评论之外,这种行为的原因似乎是 Gnuplot 源代码树的 src/axis.c 中的函数 setup_tics 设置(第 862 行)的值步长大于 3600*24*28 相应长轴抽动的时间级别到 TIMELEVEL_MONTHS

但是,正如 src/axis.c 第 1351 行函数 time_tic_just 中的注释所建议的(下面的代码证实),在这种情况下,tic 位置确实四舍五入到该月的第一天:

/* skip it, I have not bothered with weekday so far */
if (level >= TIMELEVEL_MONTHS) {/* units of month */
if (tm.tm_mday > 25) {
    tm.tm_mon++;
    if (tm.tm_mon > 11) {
    tm.tm_year++;
    tm.tm_mon = 0;
    }
}
tm.tm_mday = 1;
}