2016-03-09 129 views
2

之間違規行爲在時間序列上的標籤在創建條形圖,並通過熊貓我已經遇到了一些不一致的行爲使用matplotlib線圖。例如:熊貓matplotlib繪製,柱狀圖和線形圖

import matplotlib.pyplot as plt 
import pandas as pd 
from pandas_datareader import data 

test_df = data.get_data_yahoo('AAPL', start='2015-10-01') 
test_df['Adj Close'].plot() 

地塊如預期有合理的X軸標籤:

enter image description here

但是,如果你再嘗試繪圖來自同一數據框的東西爲條形圖:

test_df['Volume'].plot(kind='bar') 

enter image description here

的x軸刻度標籤不再自動顯示。

是大熊貓/ matplotlib的這種預期的行爲?那麼如何能夠輕鬆地糾正條形圖上的x軸刻度標籤與上面線形圖中的標籤類似?

回答

3

你可以告訴matplotlib顯示每N個標籤:

# show every Nth label 
locs, labels = plt.xticks() 
N = 10 
plt.xticks(locs[::N], test_df.index[::N].strftime('%Y-%m-%d')) 

import matplotlib.pyplot as plt 
import pandas as pd 
from pandas_datareader import data 

test_df = data.get_data_yahoo('AAPL', start='2015-10-01') 
fig, ax = plt.subplots(nrows=2) 
test_df['Adj Close'].plot(ax=ax[0]) 
test_df['Volume'].plot(kind='bar', ax=ax[1]) 

# show every Nth label 
locs, labels = plt.xticks() 
N = 10 
plt.xticks(locs[::N], test_df.index[::N].strftime('%Y-%m-%d')) 

# autorotate the xlabels 
fig.autofmt_xdate() 
plt.show() 

產量 enter image description here


另一種選擇是matplotlib直接使用:

import matplotlib.pyplot as plt 
import pandas as pd 
from pandas_datareader import data 
import matplotlib.dates as mdates 

df = data.get_data_yahoo('AAPL', start='2015-10-01') 
fig, ax = plt.subplots(nrows=2, sharex=True) 

ax[0].plot(df.index, df['Adj Close']) 
ax[0].set_ylabel('price per share') 

ax[1].bar(df.index, df['Volume']/10**6) 
ax[1].xaxis.set_major_locator(mdates.MonthLocator(bymonthday=-1)) 
xfmt = mdates.DateFormatter('%B %d, %Y') 
ax[1].xaxis.set_major_formatter(xfmt) 
ax[1].set_ylabel('Volume (millions)') 

# autorotate the xlabels 
fig.autofmt_xdate() 
plt.show() 

enter image description here

+0

感謝,除了會是可能的,只是情節一個月,一年x軸上(如十月,2015年),你會怎麼做y軸人類可讀? – BML91

+1

你想如何看y標籤? – unutbu

+0

實際上可能是相同的,只是沒有1e8和y軸標籤(即卷(百萬))的回報規模? – BML91