我有各种数据集,每个数据集可能跨越多天。数据集在编写时具有未知内容(因为它们来自日志文件),并且要显示的数据范围在任何给定时间都归我的用户所有。
我想要一个类似于下图所示的X轴。时间刻度显示为HH:MM
,但更改为标记新一天开始的日期。
(©Advanced Software Engineering Limited - 取自ChartDirector文档)
我不想在每个刻度线上显示DD MM HH:MM
,因为that's a waste of space!
我已经开始为自动滴答设置HH:MM
,然后在每个午夜手动添加额外的DD MM
个刻度(标签中带有前导\n
)。我也试图利用次要标记:
set format x "%d %b"
set xtics <start>,2592000,<end>
set format x "%H:%M"
set mxtics default
......但这让我没有任何嘀嗒声。此外,理想情况下,我想“请求”GnuPlot为我做这个,而不是硬编码滴答,以便自动缩放可以显示/隐藏滴答,具体取决于可用空间。 (但是,当我从知道绘制数据的开始/结束日期的C ++程序生成GnuPlot脚本时,我确实能够生成具有特定日期/时间的set xtics
命令,如果需要的话。)
ChartDirector通过允许我们设置“多标签”来实现这一点,基本上是标签格式取决于条件的标记,例如“这是新一天的第一个标签吗?”。
GnuPlot中有类似的东西吗?解决方案应与GnuPlot 4.4兼容。
答案 0 :(得分:1)
根据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测试代码。根据{{3}},set for
语法也适用于Gnuplot 4.4。