2017-04-14 13 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

主な問題それはですは、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