带有月份名称的Gnuplot X轴

时间:2013-02-13 04:50:56

标签: gnuplot

我有一个数据文件,其中浮点时间列从零增加到某个大值。每个时间点都与数据点相关联。

时间点也恰好与月份相对应,例如0=Jan, 1=Feb, ..., 11=Dec, 12=Jan, 13=Feb, ...

我想绘制这些数据,以便在X轴上看到月份名称,而不是0-*

有办法做到这一点吗?

如果它有用,我也可以在数据中预先生成月份名称。

包含可能有用的月份名称的样本数据如下。

#Time Month Data
0.01   Jan 0
0.055  Jan 0
0.2575 Jan 0
1.1687 Feb 0
1.9889 Feb 0
3.1037 Apr 0.00065915
3.2427 Apr 0.0035198
4.0656 May 0.03785
4.2134 May 0.041977
5.0032 Jun 0.049293
6.024  Jul 0.080957
7.0317 Aug 0.34284
7.9847 Aug 0.80902
8.0081 Sep 0.8149
8.9749 Sep 0.94009
9.0316 Oct 0.94389
9.9893 Oct 0.97967
10.058 Nov 0.97967
10.295 Nov 0.97967
11.125 Dec 0.97967
13.151 Feb 0.97967
13.696 Feb 0.97967
14.124 Mar 0.9797
15.119 Apr 0.97733

1 个答案:

答案 0 :(得分:3)

我的第一个想法是尝试使用timefmt偷偷摸摸的东西,但不幸的是,这不起作用,因为所有月份的长度都不一样,所以你实际上并没有这里的线性比例。我认为你真正做的最好的事情是手动指定抽搐:

set xtics ("Jan" 0.5, "Feb" 1.5, "Mar" 2.5, ...)

这会调整抽动,使它们以范围为中心。如果您不想这样,那么请改用整数值:

set xtics ("Jan" 0, "Feb" 1, "Mar" 2, ...)

当然,你可以使用gnuplot 4.6中引入的for do循环使其更加灵活:

MONTHS="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
set xtics ( "Jan" 0.5 )  #first one can't have `add`.
do for [i=1:15] {
    which_month = word(MONTHS,i%12+1)
    pos = i+0.5
    set xtics add ( which_month pos )
}
plot 'test.dat' u 1:3

您甚至可以通过查看stats的{​​{1}}命令获取循环的上限 - (您可能使用STATS_max或类似的东西):

N = int(STATS_max+1)

还有一个速记符号也适用于gnuplot 4.4:

stats 'test.dat' u 1 nooutput #Runs stats on the file, generates STATS_max