我有一个时序图,显示每个月和一个值。
我添加了网格线plt.grid(True,which='major')
,并且每个月都会显示一次。我的时间序列是10年,我只希望每年看到1个网格。
我的主要刻度线标签是:
ax.xaxis.get_majorticklocs()
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,
11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,
22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,
33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,
44., 45., 46., 47., 48., 49., 50., 51., 52., 53., 54.,
55., 56., 57., 58., 59., 60., 61., 62., 63., 64., 65.,
66., 67., 68., 69., 70., 71., 72., 73., 74., 75., 76.,
77., 78., 79., 80., 81., 82., 83., 84., 85., 86., 87.,
88., 89., 90., 91., 92., 93., 94., 95., 96., 97., 98.,
99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,
110., 111., 112.])
我尝试通过以下方式更改主要刻度标签:
labels = ['']*len(ax.xaxis.get_majorticklocs())
idx=list(range(len(labels))[0::11])
for i in idx:
labels[i]=ax.xaxis.get_majorticklocs()[i]
labels[len(labels)-1]=ax.xaxis.get_majorticklocs()[len(labels)-1]
from numpy import array
labels=array(labels)
ax.set_xticks(labels)
标签为:
array(['0.0', '', '', '', '', '', '', '', '', '', '', '11.0', '', '', '',
'', '', '', '', '', '', '', '22.0', '', '', '', '', '', '', '', '',
'', '', '33.0', '', '', '', '', '', '', '', '', '', '', '44.0', '',
'', '', '', '', '', '', '', '', '', '55.0', '', '', '', '', '', '',
'', '', '', '', '66.0', '', '', '', '', '', '', '', '', '', '',
'77.0', '', '', '', '', '', '', '', '', '', '', '88.0', '', '', '',
'', '', '', '', '', '', '', '99.0', '', '', '', '', '', '', '', '',
'', '', '110.0', '', '112.0'], dtype='<U32')
不幸的是,当我绘图时,所有的majorticklocs都保持不变,而且我仍然每个月都在网格线上看到。
我的情节已经完成:
fig, ax = plt.subplots(figsize=(20,20))
plt.plot(SoldHx['month'],SoldHx['Price'])
fig.suptitle('Median Price by Month')
labels = ['']*len(SoldHx.index)
idx=list(range(len(labels))[0::12])
for i in idx:
labels[i]=SoldHx['month'][i]
labels[len(labels)-1]=SoldHx['month'][len(labels)-1]
plt.xticks(SoldHx.month,labels,rotation=90)
plt.grid(True,which='major')
plt.show()
答案 0 :(得分:0)
您仅设置了主刻度线,缺少了小刻度线。我曾经有一个类似的问题,我只想要年度主线和季度副线,包括刻度标签。我的解决方案采用以下方式(从窗格中找到pd ...):
years = list(range(2000, 2018))
year_tick_pos = [pd.to_datetime(str(year) + "-01-01") for year in years]
quarters = list()
quarter_tick_pos = list()
for year in years:
for q in range(1, 5):
new_quarter = pd.to_datetime(str(year) + "-" + str(q * 3 - 2).zfill(2) + "-01")
if new_quarter <= limits[1]:
quarter_tick_pos.append(new_quarter)
quarters.append("Q" + str(q))
ax.set_xlim(left=quarter_tick_pos[0] - pd.Timedelta('45 days'),
right=quarter_tick_pos[-1] + pd.Timedelta('45 days'))
ax.set_xticks(year_tick_pos)
labels_major = ax.set_xticklabels(years)
ax.set_xticks(quarter_tick_pos, minor=True)
ax.set_xticklabels(quarters, minor=True, fontsize=8)
此代码段创建了不同样式的季度线和年度线,也许可以为您提供帮助。