2017-04-14 122 views
1

我想在同一個圖上繪製一條線和一條線。這是什麼工作,什麼不工作。有人會解釋爲什麼嗎?熊貓在線的陰謀條形圖

什麼行不通:

df = pd.DataFrame({'year':[2001,2002,2003,2004,2005], 'value':[100,200,300,400,500]}) 
df['value1']= df['value']*0.4 
df['value2'] = df['value']*0.6 
fig, ax = plt.subplots(figsize = (15,8)) 
df.plot(x = ['year'], y = ['value'], kind = 'line', ax = ax) 
df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = ax) 

enter image description here

但不知何故,當我在第一個情節刪除x=['year']工作:

fig, ax = plt.subplots(figsize = (15,8)) 
df.plot(y = ['value'], kind = 'line', ax = ax) 
df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = ax) 

enter image description here

+0

的可能的複製[熊貓情節不覆蓋(http://stackoverflow.com/questions/42948576/pandas-plot-does-not-overlay) – ImportanceOfBeingErnest

+0

[這個問題](HTTP:/ /stackoverflow.com/questions/42813890/python-making-combined-bar-and-line-plot-with-secondary-y-axis)也可能是有趣的。 – ImportanceOfBeingErnest

回答

4

的主要問題那是kinds="bar"在x軸的低端繪製柱狀圖(因此2001實際上在0上),而kind="line"根據給定的值繪製它。刪除x=["year"]只是讓它根據順序繪製值(通過運氣精確地匹配您的數據)。

可能有更好的方法,但我知道最快的方法是停止考慮年份是一個數字。

df = pd.DataFrame({'year':[2001,2002,2003,2004,2005], 'value':[100,200,300,400,500]}) 
df['value1']= df['value']*0.4 
df['value2'] = df['value']*0.6 
df['year'] = df['year'].astype("string") # Let them be strings! 
fig, ax = plt.subplots(figsize = (15,8)) 
df.plot(x = ['year'], y = ['value'], kind = 'line', ax = ax) 
df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = ax) 

治療一年這樣有道理的,因爲你把今年作爲一個明確的數據,無論如何,和按字母順序排列的數字順序相匹配。

enter image description here

+0

非常豐富! – piRSquared

+0

這是一個很好的伎倆! – MaxU

+0

我有一種感覺,我只有在幸運運動中才有所作爲,這就是爲什麼我發佈了這個問題。解釋清楚,解決方案解決了我的任務中涉及的幾個相關問題。謝謝! – Crystie