rcParams['date.autoformatter.month'] = "%b\n%Y" 

我正在使用 matpltolib 绘制时间序列,如果我像上面那样设置 rcParams,则生成的图在每个刻度处都有标记的月份名称和年份。我怎样才能设置它,以便只在每年的一月绘制年份。我尝试这样做,但它不起作用:

rcParams['date.autoformatter.month'] = "%b" 
rcParams['date.autoformatter.year'] = "%Y" 

请您参考如下方法:

格式化程序不允许在其上指定条件。根据系列的跨度,AutoDateFormatter 将落入 date.autoformatter.month 范围或 date.autoformatter.year 范围。

此外,AutoDateLocator 可能根本不一定决定实际勾选一月一日。

因此,我建议将代码直接指定为所需的格式和位置。您可以使用主要刻度来显示年份,使用次要刻度来显示月份。主要刻度的格式然后可以换行,以免与次要刻度标签重叠。

import matplotlib.pyplot as plt 
import matplotlib.dates 
from datetime import datetime 
 
t = [datetime(2016,1,1), datetime(2017,12,31)] 
x = [0,1] 
 
fig, ax = plt.subplots() 
ax.plot(t,x) 
 
ax.xaxis.set_major_locator(matplotlib.dates.YearLocator()) 
ax.xaxis.set_minor_locator(matplotlib.dates.MonthLocator((1,4,7,10))) 
 
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("\n%Y")) 
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter("%b")) 
plt.setp(ax.get_xticklabels(), rotation=0, ha="center") 
 
plt.show() 

如果需要,您还可以调整次要刻度线的长度以匹配主要刻度线的长度,

ax.tick_params(axis="x", which="both", length=4) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!