爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 19952|回复: 4

[源代码] [已收纳]python之时间轴自由标注刻度的案例

[复制链接]

新浪微博达人勋

发表于 2020-11-29 17:06:52 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-2-13 13:33 编辑

最近做需求分析的朋友需要实现时间轴刻度自由标注,我就写了一个案例:
Figure_1.png
from datetime import datetime,timedelta#导入时间处理的包
import numpy as np
import matplotlib.pyplot as plt
t1=datetime(2020,1,1,0,0,0)#起始时间
t2=datetime(2021,1,1,0,0,0)#终止时间
onehour=timedelta(days=0, seconds=0, minutes=0, hours=1, weeks=0)#一小时的时长
oneweek=timedelta(days=0, seconds=0, minutes=0, hours=0, weeks=1)#一周的时长
x=np.arange(t1,t2,onehour)#从t1到t2,以一小时为间隔的时间序列
y=range(len(x))#与x等长的递增序列,后面画图用
xt=[t1,t1+oneweek*40]#准备标记在x轴上的2个时间点,数量可以自己定
n=len(xt)#xt的个数
#由于以上的时间是datetime格式,以下用strftime转为字符串后,覆盖xt
for i in range(n):
    # xt
=xt.strftime("%Y-%m-%d %H:%M:%S")#这个是年月日时分秒都有的
    xt
= xt.strftime("%Y-%m-%d")#这个只有年月日
#图像长宽与分辨率可以设置:
plt.figure(figsize=(8,4),dpi=100)
#散点图:
plt.plot(x,y)
#标记x轴:
plt.xticks(xt)
#显示图:
plt.show()

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-11-29 23:21:12 | 显示全部楼层
谢楼主分享,拿走学习啦
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-11-30 08:47:42 | 显示全部楼层
竹外桃 发表于 2020-11-29 23:21
谢楼主分享,拿走学习啦

交流学习,共同进步
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-11-30 10:30:37 | 显示全部楼层
又发现一个和我之前刚学python时候,用自制笨方法打timeticks的人了,嘻嘻嘻....
有关于时间序列生成的,用原生的timedelta结合np.arange虽然说也行...
不过我觉得用python-dateutil函数更加一步到位:
  1. from dateutil.rrule import *
  2. from dateutil.parser import *

  3. time_hourly=list(rrule(HOURLY,dtstart=parse('20200101'),until=parse('20210101')))
  4. time_weekly=list(rrule(WEEKLY,dtstart=parse('20200101'),until=parse('20210101')))
复制代码

然后就是timeticks的,matplotlib是有专门处理的方法的
  1. import matplotlib.dates as mdates
  2. import matplotlib.ticker as ticker
  3. ax = plt.gca()
  4. ax.xaxis.set_major_locator(mdates.MonthLocator(bymonthday=1)) #主坐标按照每个月1号定位
  5. ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=15)) #次坐标按照每个月15号定位
  6. ax.xaxis.set_minor_formatter(mdates.DateFormatter('%b-%Y')) #将月份缩写打在次坐标上边
  7. ax.xaxis.set_major_formatter(ticker.NullFormatter())
复制代码

按周、按天的也比较类似,去查mdates函数就好
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-11-30 21:33:45 | 显示全部楼层
Masterpiece 发表于 2020-11-30 10:30
又发现一个和我之前刚学python时候,用自制笨方法打timeticks的人了,嘻嘻嘻....
有关于时间序列生成的, ...

谢谢交流,虽然我的小需求用笨办法就行了,但您这种高级方法可能我以后会用到
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表