matplotlib畫圖 x軸時間序列自動補全問題


使用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軸顯示標簽的個數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM