月份抽动,如何设置

问题描述 投票:0回答:2

在 GnuPlot 中:

如何将xtics设置为每月1号?

set xtics 对我不起作用,因为每月的秒数各不相同。

set xmtics
对我不起作用,因为显示的月份没有年份,并且不显示月份属于哪一年。

gnuplot
2个回答
25
投票

在我看来,gnuplot 处理时间的效果出奇的好。我假设您的数据采用以下(或类似)格式:

05/17/12    0.8188064359
05/18/12    0.97297057
05/21/12    0.9012782504

我使用了一年半的随机数来测试这一点。

所以首先你需要告诉 gnuplot 你的 x 坐标是时间以及它的写入格式是什么:

set xdata time
set timefmt "%m/%d/%y"

从现在开始,gnuplot 期望指定格式的所有范围,包括

xtics
xrange
命令。唯一的例外是
xtics
的增量,应该以秒为单位。

set xrange ["05/01/12":"08/01/13"]
set xtics "01/01/12",2592000,"08/01/18"

现在您可能会说,每个月的秒数相差一整天(实际上二月有 2 天)。然而,gnuplot 作者似乎也考虑到了这一点,他们按照我们的喜好解决了这个问题。换句话说,上述内容将确保每月 1 日发生一次抽动。这里我只能建议指定打印格式

xtics

set format x "%d %b %Y"

这将导致“01 May 2012”等。 之后,

plot
您的数据。哦,当在 x 轴上使用时间时,gnuplot 需要在
using
命令中使用
plot
,所以即使使用像我这样的简单数据文件,我也必须使用

plot 'data.txt' using 1:2

我使用 gnuplot 版本 4.6 patchlevel 0 并输出到 postscript 终端。 如果您对您的版本或终端有不同的体验,请在评论中告诉我。


4
投票
如果您将秒数设置为一个月的平均秒数,

set xtics
就可以正常工作。

我通过假设平均一年有 365.2425 天,除以 12 得出每月平均天数(大约 30.4),乘以每天的小时数,然后乘以每小时的秒数,即:

365.2425 / 12 * 24 * 3600 = 2629746

假设您的数据格式为年-月和值,即:

2016-01 10000
2016-02 12000
2016-03 10500

然后你需要这样的命令:

set xdata time
set timefmt "%Y-%m"
set format x "%b/%y" # Or some other output format you prefer
set xtics "2016-01", 2629746, "2016-03"
plot "mydata.dat" using 1:2 with linespoints

如果您想以月份的倍数设置 xtics,则只需在

set xtics
行中添加乘数,例如获得季度分数:

set xtics "2016-01", 3*2629746, "2016-12"

我发现,如果我假设一个月的天数为 30 或 31,那么图表中的某些点,月份将缺少其 xtics。

Gnuplot 6 更新

Gnuplot 6 的一个新功能是直接从时间值设置 xtics:

set xtics time 1 months
© www.soinside.com 2019 - 2024. All rights reserved.