Gnuplot 如何有条件地将时间替换为日期(以X轴为单位)?

Gnuplot 如何有条件地将时间替换为日期(以X轴为单位)?,gnuplot,Gnuplot,我有各种各样的数据集,每一个都可能跨越几天。数据集在编写时有未知的内容(因为它们来自日志文件),在任何给定的时间,要显示的数据范围都取决于我的用户 我想要一个类似于下图的X轴。时间刻度显示为HH:MM,但更改为日期以标记新一天的开始 (©高级软件工程有限公司-摘自ChartDirector文档) 我不想在每个刻度上都显示DD MM HH:MM,因为 我已经为自动滴答设置了HH:MM,然后在每个午夜手动添加额外的DD MM滴答(标签中有一个前导的\n)。我还尝试使用小刻度: set format

我有各种各样的数据集,每一个都可能跨越几天。数据集在编写时有未知的内容(因为它们来自日志文件),在任何给定的时间,要显示的数据范围都取决于我的用户

我想要一个类似于下图的X轴。时间刻度显示为
HH:MM
,但更改为日期以标记新一天的开始


(©高级软件工程有限公司-摘自ChartDirector文档)

我不想在每个刻度上都显示
DD MM HH:MM
,因为

我已经为自动滴答设置了
HH:MM
,然后在每个午夜手动添加额外的
DD MM
滴答(标签中有一个前导的
\n
)。我还尝试使用小刻度:

set format x "%d %b"
set xtics <start>,2592000,<end>

set format x "%H:%M"
set mxtics default
设置格式x“%d%b”
设置xtics,2592000,
设置格式x“%H:%M”
将mxtics设置为默认值
…但这让我一点也不害怕。此外,理想情况下,我只想“要求”GnuPlot为我做这件事,而不是硬编码记号,这样自动缩放可以根据可用空间大小显示/隐藏记号。(但是,当我从一个C++程序生成GnUpTrand脚本时,知道程序的数据的开始/结束日期,我确实有能力生成<代码> SETXTICS < /代码>命令,如果需要的话,在其中有特定的日期/时间)。 ChartDirector通过允许我们设置“多标签”来实现这一点,基本上,标签格式取决于条件,比如“这是新一天的第一个标签吗?”


GnuPlot中有类似的东西吗?解决方案应与GnuPlot 4.4兼容。

根据Christoph的评论,以下脚本应将日期而不是时间设置为午夜

set xdata time
set format x "%H:%M"

day0 = 1467324000     # 2016-07-01 00:00:00 UTC, first day to be shown.
day0 = day0 + 60*60*2 # 2 hours difference for UTC -> CEST conversion (in my case).
num_days = 2          # Time span to be shown.

pbm_offset_rel = 5e-4      # This is for faking the bold font.
pbm_offset = num_days*24*60*60*pbm_offset_rel

# The default grid every 6 hours, minor tics for the hourly grid.
set xtics 21600 format '%H:%M'
set mxtics 6

# Replace tic labels at midnight.
set for [i=0:num_days] xtics add (strftime('%b %d', day0+i*24*60*60) day0+i*24*60*60)

# We move the midnight labels and corresponding grid lines left and right to make them appear bold.
set xtics add (strftime('%b %d', day0) day0 + pbm_offset)
set for [i=1:num_days] xtics add (strftime('%b %d', day0+(i-1)*24*60*60) day0+(i-1)*24*60*60-pbm_offset)
set xtics add (strftime('%b %d', day0+num_days*24*60*60) day0+num_days*24*60*60-2*pbm_offset)

# Use solid/dotted grid lines for major/minor tics.
set grid xtics, mxtics  ls 1 lc 0, ls 0

set xrange  [day0:day0+num_days*24*60*60]

set terminal png size 1280,480
set output "output.png"
set samples 1200
plot sin(0.00005*x)
该代码在Debian Linux上使用Gnuplot 4.6进行测试。根据为设置的
,语法也应该与gnuplot4.4一起使用


看看我的答案。对于
stats
,这需要4.6,但您也可以将数据范围从程序传递到脚本。关于为
语法设置的
,我不知道4.4是否支持这一点。这一点非常接近(谢谢!),但我觉得不够灵活。您已硬编码,每6小时将有一个大刻度,每小时将有一个小刻度。对于您的特定数据集来说,这很好,例如2天,但是如果我的用户绘制6个月的数据会怎么样?或者如果我的用户请求的图像大小小于1280x480?轴将过于拥挤,我们失去了Gnuplot的自动缩放魔法。另外,如果数据范围不是在午夜开始,奇怪的事情就会发生。虽然这可能是Gnuplot能给我的最好的结果,但我必须单独解决这些问题?我会玩这个,看看我能想出什么。。。