【问题标题】:Format date/time axis in Gnuplot在 Gnuplot 中格式化日期/时间轴
【发布时间】:2018-07-05 22:24:27
【问题描述】:

我有以下数据系列:

201708201600 1.175588 1.175631 1.175553 1.175591
201708202000 1.175564 1.175604 1.175520 1.175561
201708210000 1.174651 1.174711 1.174582 1.174644
201708210400 1.174855 1.174935 1.174785 1.174862
201708210800 1.179250 1.179381 1.179146 1.179268
201708211200 1.181497 1.181555 1.181437 1.181495
201708211600 1.181187 1.181228 1.181142 1.181185
201708212000 1.181156 1.181195 1.181113 1.181151
201708220000 1.179908 1.179969 1.179837 1.179902
201708220400 1.176303 1.176397 1.176190 1.176293
201708220800 1.176182 1.176286 1.176073 1.176177
201708221200 1.175669 1.175722 1.175607 1.175667
201708221600 1.176249 1.176292 1.176201 1.176249
201708222000 1.175689 1.175735 1.175640 1.175687
201708230000 1.175872 1.175956 1.175803 1.175881
201708230400 1.178496 1.178590 1.178409 1.178501
201708230800 1.180339 1.180446 1.180235 1.180339
201708231200 1.181056 1.181128 1.180989 1.181063
201708231600 1.181169 1.181212 1.181126 1.181168
201708232000 1.180509 1.180546 1.180466 1.180502
201708240000 1.179841 1.179903 1.179779 1.179836
201708240400 1.179210 1.179283 1.179138 1.179215
201708240800 1.180083 1.180180 1.179983 1.180079
201708241200 1.180609 1.180661 1.180560 1.180609
201708241600 1.179991 1.180023 1.179961 1.179991
201708242000 1.179487 1.179522 1.179448 1.179485
201708250000 1.179193 1.179242 1.179133 1.179185
201708250400 1.180497 1.180586 1.180420 1.180508
201708250800 1.183690 1.183868 1.183538 1.183712
201708251200 1.189021 1.189156 1.188896 1.189041
201708251600 1.192202 1.192281 1.192131 1.192194

第一列代表日期/时间YYYYMMDDhhmm

这意味着在这个特定示例中每 4 小时有一次数据。

我需要得到:

  1. 每天 00:00 在 x 轴上的一个主要刻度,显示月份和日期
  2. 每 4 小时在 x 轴上出现一个小刻度,没有标签文本。

我试过了:

set timefmt "%Y%m%d%H%M"
set format x "%b %d"
set xdata time

有效地将日期/时间格式化为月份名称和日期编号。

如何强制每天发生主要刻度,而其余数据为次要刻度?

因此,在这种情况下,我希望打开主要刻度:

-      (2 minor ticks for 16:00 and 20:00)
Aug 21 (6 minor ticks for 00:00 to 20:00)
Aug 22 (6 minor ticks for 00:00 to 20:00)
Aug 23 (6 minor ticks for 00:00 to 20:00)
Aug 24 (6 minor ticks for 00:00 to 20:00)
Aug 25 (6 minor ticks for 00:00 to 20:00)
Aug 26 (5 minor ticks for 00:00 to 17:00)

因此我们的想法是我们每 4 小时标记一个刻度(根据数据),但文本只出现在新一天的开始,这将使图表易于阅读。

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    首先是简单的解决方案,它可能适合也可能不适合您的一般情况:

    # Option 1:  tic pattern is independent of data in file
    # Set one major tic per day with minor tics every 4 hours
    seconds_per_day = 60.*60.*24.
    set xtics seconds_per_day
    set mxtics 6
    

    如果您确实需要每个数据条目一个 tic 且没有额外内容,那么它会变得更加复杂。首先请注意,此命令将为文件中的每个条目放置一个 tic 标记,但它们都没有标签:

    plot 'time.dat' using 1:2:xtic("") with lp
    

    现在让我们通过定义一个标签函数来扩展它,该函数从 N 列读取一个字符串并打印一个空标签,除非最后四个字符是 0000(即午夜)。在午夜,它会将时间值重新格式化为您喜欢的“%b %d”:

    label(N) = (strcol(N)[9:12] eq "0000") \
             ? strftime("%b %d",timecolumn(N,"%Y%m%d%H%M")) \
             : ""
    

    完整的绘图命令如下所示

    plot 'time.dat' using 1:2:xtic(label(1)) with lp
    

    【讨论】:

    • 你让我开心,我不知道如何解决这个问题。您的解决方案解决了这个问题,但我仍然发现午夜的抽动(即标记日期标签的抽动)应大于常规的 4 小时抽动。原因是图表可能有点误导标记标签属于哪个。
    • 主要和次要抽动具有不同的比例因子。例如,如果您想保持主要抽动的当前长度,但使次要抽动的长度只有一半:设置 ticscale 1.0, 0.5
    猜你喜欢
    • 1970-01-01
    • 2013-07-21
    • 2019-06-28
    • 2020-10-06
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多