gpt4 book ai didi

gnuplot - 如何在 gnuplot 5.4 中绘制月份数字?

转载 作者:行者123 更新时间:2023-12-04 08:29:42 24 4
gpt4 key购买 nike

我想在 gnuplot 5.4 中获取日期的月份。
考虑以下数据:

2019/01/01
2019/02/01
2019/03/01
2019/04/01
2019/05/01
2019/06/01
2019/07/01
2019/08/01
2019/09/01
2019/10/01
2019/11/01
2019/12/01
2020/01/01
2020/02/01
2020/03/01
2020/04/01
2020/05/01
2020/06/01
2020/07/01
2020/08/01
2020/09/01
2020/10/01
2020/11/01
2020/12/01
对于每个数据点,我想在 x 上显示完整日期 y 上的轴和月份数 (0-11)轴。
gnuplot 文档建议使用 tm_mon function对于这样的任务,它应该返回给定日期的月份数。
据我了解,下面的 gnuplot 脚本应该做我想做的:
#!/bin/gnuplot
set timefmt '%Y/%m/%d'
set xdata time
set format x '%m/%y'
set datafile separator ','

plot "data.csv" using 1:(tm_mon($1)) title 'data'
但事实并非如此。这个 gnuplot 脚本正确地显示了 x 上的日期轴但有一个常数 0y轴。
我究竟做错了什么?为什么是 tm_mon($1)不断返回0?

最佳答案

我不确定我是否完全理解你的意图。
我知道您想要第 1 列作为 xtic 标签。
但是,仅将第 1 列作为 xtic 标签或将第 1 列解释为日期/时间并相应地缩放 x 轴之间存在差异,gnuplot 会自动处理 xtic 标签。
对于第一种情况,图形的宽度可能不足以显示所有标签而不会重叠,因此,我重新格式化了日期。查询 help strptimehelp strftime .顺便说一句,help tm_mon说它需要以秒为单位输入,而不是以您的日期格式输入 $1 , 有使用 strptime() .
我知道您想要一年中几个月的 yrange 范围从 1 到 12。
但是您要绘制的数据在哪里?
也许下面的例子是一个起点,可以更好地找出你真正想要的东西。
代码:

### plotting dates...
reset session

$Data <<EOD
2019/01/01
2019/02/01
2019/03/01
2019/04/01
2019/05/01
2019/06/01
2019/07/01
2019/08/01
2019/09/01
2019/10/01
2019/11/01
2019/12/01
2020/01/01
2020/02/01
2020/03/01
2020/04/01
2020/05/01
2020/06/01
2020/07/01
2020/08/01
2020/09/01
2020/10/01
2020/11/01
2020/12/01
EOD

myTimeInputFmt = "%Y/%m/%d"
myTimeOutputXFmt = "%Y\n%m\n%d"
set xlabel "Date"
set format x myTimeOutputXFmt # to get enough space for the 3 lines of the label

set ylabel "Month"
set yrange [0.5:12.5]
set ytics 1

plot $Data u 0:(tm_mon(strptime(myTimeInputFmt,strcol(1)))+1): \
xtic(strftime(myTimeOutputXFmt,strptime(myTimeInputFmt,strcol(1)))) \
with points pt 7 lc "red" title 'data'
### end of code
结果:
enter image description here

关于gnuplot - 如何在 gnuplot 5.4 中绘制月份数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65086109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com