微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Matplotlib 中设置月末的刻度线

如何解决如何在 Matplotlib 中设置月末的刻度线

我有一个每个月末的日期列表,我希望我的绘图的网格线和标签与这些日期一致。目前我只能在月初绘制图表。有没有办法强制 Matplotlib 在其图表中使用月末值?

import matplotlib.pyplot as plt 
from datetime import datetime
from matplotlib.dates import MonthLocator
from matplotlib.dates import DateFormatter
  
dts = [datetime(2020,11,30),datetime(2020,12,31),datetime(2021,1,2,28),3,4,5,6,7,8,9,10,datetime(2022,]
vals = [2000,2500,3000,4000,4500,6000,5000]
    
figsize=(3,6)
fig,ax = plt.subplots(figsize=figsize)
    
ax.xaxis.set_major_locator(MonthLocator((3,12)))
fmt = DateFormatter("%Y-%m")
ax.xaxis.set_major_formatter(fmt)

ax.plot(dts,vals,color = 'blue')
ax.grid(True)
plt.show()

解决方法

一种选择是手动或动态set_ticks()

ax.set_xticks([datetime(2020,12,31),datetime(2021,3,6,30),9,31)])

或更好:

ax.set_xticks(dts[1::3]) # this uses every third element starting with second element

完整代码:

import matplotlib.pyplot as plt 
from datetime import datetime
from matplotlib.dates import MonthLocator
from matplotlib.dates import DateFormatter

dts = [datetime(2020,11,datetime(2020,1,2,28),4,5,7,8,10,datetime(2022,]
vals = [2000,2500,3000,4000,4500,6000,5000]

figsize=(12,6)
fig,ax = plt.subplots(figsize=figsize)

fmt = DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(fmt)
ax.set_xticks([datetime(2020,31)])
ax.set_xticks(dts[1::3])

ax.plot(dts,vals,color = 'blue')
ax.grid(True)
plt.show()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。