使用matplotlib畫圖的時候,x軸的時間序列顯示經常會出現問題自動補全的問題。
df = DataFrame(index=ratio_d_df.index[-20:]) df['pct'] = 0.05 df['cruve'] = (df['pct'] + 1).cumprod() fig, ax = plt.subplots(dpi=100, figsize=(9,6)) ax.plot(df['cruve'], color = 'b', label=u'累計收益率', alpha = .5)
pct | cruve | |
---|---|---|
date | ||
2019-04-26 | 0.05 | 1.050000 |
2019-04-29 | 0.05 | 1.102500 |
2019-04-30 | 0.05 | 1.157625 |
2019-05-06 | 0.05 | 1.215506 |
2019-05-07 | 0.05 | 1.276282 |
2019-05-08 | 0.05 | 1.340096 |
x軸自動補全了周末以及五一假期的數據,圖形的表現是不連續,不利於觀察實際運行情況。
fig, ax = plt.subplots(dpi=100, figsize=(9,6)) x = df.index ax.plot(range(20), df['cruve'], color = 'b', label=u'累計收益率', alpha = .5) ax.set_xticks(range(len(x))) ax_xticklabels = map(lambda x:str(x)[0:4]+str(x)[5:7]+str(x)[8:10], x) ax.set_xticklabels(ax_xticklabels) fig.autofmt_xdate() ax.set_xlim(-0.5, len(x)-0.5)
先用連續數列填充,最后再替換成字符串的日期。對於數據比較少情況,這樣處理就可以了,如果數據比較多,x軸則顯示不了這么多日期,可以使用
ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(base=len(df)//20))
for label in ax.get_xticklabels():
label.set_visible(False)
for label in ax.get_xticklabels()[::20]:
label.set_visible(True)
ax.set_xticks(range(0,len(x),len(df)//N))
ax_xticklabels = list(map(lambda x:str(x)[0:4]+str(x)[5:7]+str(x)[8:10], x))
ax.set_xticklabels(ax_xticklabels[::len(df)//N])
確定每個坐標軸之間間隔多少數據,這樣可以控制x軸顯示標簽的個數。