2013-02-13 77 views
1

我有一个数据文件,其中浮点时间列从零增加到某个较大值。每个时间点都与一个数据点相关联。具有月份名称的Gnuplot X轴

的时间点也正好对应个月,这样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 
+0

我已经更新了我的答案 - 我认为这是显著更可用现在:) – mgilson 2013-02-13 13:37:10

+0

谢谢,@mgilson,它几乎正是我需要的。 – Richard 2013-02-13 15:45:00

+0

没问题。我看到你编辑了我的帖子。不同之处在于我期待你使用'stats',但你在那里也应该工作(我实际上并不需要太多使用'stats',所以我没有像大多数gnuplot的其他角落)。 – mgilson 2013-02-13 15:46:25

回答

3

我的第一个想法是尝试与timefmt偷偷摸摸的事情,但不幸的是,这并不工作,因为所有的月份是不一样的长度,所以你实际上并没有线性刻度在这里。我想,你真的可以做的最好的是手动指定抽动:

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

此调整抽动,使它们的范围为中心。如果你不希望出现这种情况,则用整数值代替:

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

当然,你可以赚这点更灵活的使用这是在gnuplot的4.6引入了一个用于做循环:

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命令望着STATS_max获得上限为您的循环 - (你可能会使用N = int(STATS_max+1)或类似的东西):

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

还有一个速记符号与gnuplot的4.4太作品:

MONTHS="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec" 
set xtics ("Jan" 0.5) 
set for [i=1:15] xtics add (word(MONTHS,i%12+1) i+0.5) 
plot 'test.dat' u 1:3