web-dev-qa-db-ja.com

matplotlib:pandasデータフレームの複数の列を棒グラフにプロットします

次のコードを使用して棒グラフをプロットしています。

import matplotlib.pyplot as pls 
my_df.plot(x='my_timestampe', y='col_A', kind='bar') 
plt.show()

プロットは正常に機能します。ただし、3つの列: 'col_A'、 'col_B'、および 'col_C'をすべてプロットに表示することで、グラフを改善したいと思います。下の例の図のように:

enter image description here

col_Aをx軸の上に青色で、col_Bをx軸の下に赤色で、col_Cをx軸の上に緑色で表示したいと思います。これはmatplotlibで可能ですか? 3列すべてをプロットするように変更するにはどうすればよいですか?ありがとう!

29
Edamame

ploty引数に列名のリストを指定することにより、複数の列を一度にプロットできます。

df.plot(x="X", y=["A", "B", "C"], kind="bar")

enter image description here

これにより、バーが隣同士にあるグラフが作成されます。

それらをオーバーラップさせるには、plotを数回呼び出し、プロットする軸をプロットaxとして指定する必要があります。

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

y = np.random.Rand(10,4)
y[:,0]= np.arange(10)
df = pd.DataFrame(y, columns=["X", "A", "B", "C"])

ax = df.plot(x="X", y="A", kind="bar")
df.plot(x="X", y="B", kind="bar", ax=ax, color="C2")
df.plot(x="X", y="C", kind="bar", ax=ax, color="C3")

plt.show()

enter image description here

v0.21.0rc1 は警告を与えるため、受け入れられた答えは正常に機能しますが

UserWarning:Pandasでは、新しい属性名を使用して列を作成できません

代わりに、できること

df[["X", "A", "B", "C"]].plot(x="X", kind="bar")
5
ayorgo