2017-09-06 12 views
1

降雨データを棒として温度データを線としてプロットしたいと思っています。私はExcelでこれを簡単に行うことができますが、私はより良い方法でそれを表示するための幻想的なpythonグラフを好むでしょう。matplotlibを使用して同じグラフ上のpandasデータフレームから線と棒をプロットする

問題を説明するためのいくつかのサンプルコードは:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

dates = pd.date_range('20070101',periods=365) 
df = pd.DataFrame(data=np.random.randint(0,50,(365,4)), columns =list('ABCD')) 
df['date'] = dates 
df = df[['date','A', 'B', 'C', 'D']] 
df.set_index(['date'],inplace=True) #set date as the index so it will plot as x axis 

これは4つの列(AとBはTEMPであり、CとDは降雨である想像する)を有するデータフレームを作成します。

私はバーとして降雨量をプロットしたい、とラインとして一時、私はこれを行うにしようとすると:

ax = df.plot(y="A", kind="bar") 
df.plot(y="B", kind = "line", ax = ax) 

ラインプロットが、not the bars.

これは何の非常に簡単なバージョンであります私はしようとしているが、私はそれが問題を説明していると思う。

EDIT:

次のコードは動作します。これは非常に冗長思えるよう

fig, ax= plt.subplots() 

ax.plot_date(df.index, df.iloc[:,2], '-') 

for i in range(3): 
    diff = df.index[1]-df.index[0] 
    spacing = diff/(1.3*len(df.columns)) 
    ax.bar(df.index+(-5+i)*spacing, df.iloc[:,i], 
     width=spacing/diff, label=df.columns[i]) 

plt.legend() 
plt.gcf().autofmt_xdate() 
plt.show() 

はそれほど複雑な答えを本当に感謝だろうが、動作しているようです!

+0

x軸は、(別途2をプロットしてみてください)互換性がありません。 – IanS

+0

関連:https://stackoverflow.com/questions/30133280/pandas-bar-plot-changes-date-format – IanS

+0

私はあなたの提案に応答するために質問を編集し、日付に基づいて新しいx軸を作成しましたが、その結果同じです – Pad

答えて

1

簡単な方法は、x_compatプロパティを使用することです:

ax = df.plot(x=index, y="A", x_compat=True) # plot lines first 
df.plot(x=index, y="B", kind="bar", ax=ax) 

その後、チック周波数を調整することができます。

ハットヒント:https://stackoverflow.com/a/39907390/5276797

+0

申し訳ありませんが、これは線ではなく棒だけをプロットしていますか? – Pad

+1

私の悪い、私は間違った試みを貼り付けた。あなたはまだ 'x = index'が必要です。私の編集を見てください。 – IanS

+0

最後に動作しましたか? – IanS

関連する問題