时间序列的自定义 gnuplot 轴标签

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

我要显示其数据的主题出生于1988-04-20。

我想让 X2 轴显示主体的积分年龄:

   | x2 label | Corresponding x1 value |
   |----------+------------------------|
   | "18"     | 2006-04-20             |
   | "19"     | 2007-04-20             |
   | "20"     | 2008-04-20             |
   | "21"     | 2009-04-20             |

脚本:

reset session;

$Data <<EOD
2006-03-24 150
2007-01-12 147
2007-11-12 149
2007-11-15 142
2008-03-29 166
2008-12-16 173
2009-05-06 170
EOD

birth_date  = "1988-04-20";

set xdata   time;
set timefmt "%Y-%m-%d";
set xtics   format "%Y-\n%m";
set x2label "Age";
set ylabel  "Weight (lbs.)";

plot $Data using 1:2;

结果: age-by-weight.png

gnuplot axis-labels
1个回答
0
投票

有两种绘制时间数据的方法,我通常更喜欢第二种方法。

set xdata time
set timefmt "%Y-%m-%d"
set format x "%Y\n%m"  
plot $Data u 1:2

myFmt = "%Y-%m-%d"
set format x "%Y\n%m" timedate
plot $Data u (timecolumn(1,myFmt)):2

此外,您可以链接x和x2轴,勾选

help link
。我想第二种方法可能会更容易(实际上,还没有尝试第一种方法)。

如需进一步阅读,请查看

help time/date
help timecolumn
help strptime

脚本:

### plotting date on x1 and age on x2
reset session

$Data <<EOD
2006-03-24  150
2007-01-12  147
2007-11-12  149
2007-11-15  142
2008-03-29  166
2008-12-16  173
2009-05-06  170
EOD

myFmt      = "%Y-%m-%d"
birth_date = strptime(myFmt, "1988-04-20")

set format x "%Y\n%m" timedate
set xtics nomirror
set x2tics numeric 
set x2label "Age"
set ylabel "Weight (lbs.)"

SecsPerYear = 3600*24*365.25
set link x2 via (x-birth_date)/SecsPerYear inverse (x*SecsPerYear+birth_date)
set x2tics 0.5 nomirror
set key noautotitle
set grid x,y

plot $Data u (timecolumn(1,myFmt)):2 w lp pt 7
### end of script

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.