以下に示すように、複数のグラフをプロットすることについて多くの質問があると思いますが、この場合には特にありません。
pandasドキュメンテーションは、複数の列グループを単一の軸にプロットするために「プロット方法を繰り返す」と述べています。しかし、3つ以上の列グループに対してこれはどのように機能しますか? :
bx = df.plot(kind='scatter', x='a',y='f',color = 'Green',label ='f')
このbxはどこに渡されますか?
また、プロットが同じグラフである場合、x軸は一貫して「a」または「c」のどちらでもないはずですか?しかし、ドキュメントには2つの異なるx軸があります: 'a'and 'c'
このbxはどこに渡されますか?
最初の呼び出しではなく、2番目のplot
の呼び出しを繰り返す必要があるため、bx
の必要はありません。
詳細:plot
は、オプションのax
引数に課税します。これは、描画する軸です。引数が提供されない場合、関数は新しいプロットと軸を作成します。さらに、軸は関数によって返されるため、以降の描画操作に再利用できます。アイデアはnotax
引数をplot
の最初の呼び出しに渡し、返された軸をすべてで使用することですその後の呼び出し。
Plotへの各呼び出しが、渡されたのと同じ軸を返すことを確認できます。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(100, 6), columns=['a', 'b', 'c', 'd', 'e', 'f'])
ax1 = df.plot(kind='scatter', x='a', y='b', color='r')
ax2 = df.plot(kind='scatter', x='c', y='d', color='g', ax=ax1)
ax3 = df.plot(kind='scatter', x='e', y='f', color='b', ax=ax1)
print(ax1 == ax2 == ax3) # True
また、プロットが同じグラフである場合、x軸は一貫して「a」または「c」のどちらでもないはずですか?
必ずしも。同じ軸に異なる列を配置することが理にかなっている場合は、それらが表すデータに依存します。たとえば、a
が収入で、c
が支出である場合、両方を同じ「お金」軸に置くのが理にかなっています。対照的に、a
がエンドウ豆の数で、c
が電圧の場合、それらはおそらく同じ軸上にあるべきではありません。
任意の列に対して任意の列をプロットできます。それが理にかなっているかどうかは、自分で決める必要があります。例えば。距離を示す列と同じ軸に時間を示す列をプロットすることは意味がありませんが、同じ軸に距離を含む2つの列をプロットすることは問題ありません。
Certinプロットが既存の軸(ax
)上にあることを指定するには、ドキュメントにあるようにax
キーワードを指定します。もちろん、同じ軸上に複数のプロットを作成できます。
ax = df.plot(kind="scatter", x="x",y="a", color="b", label="a vs. x")
df.plot(x="x",y="b", color="r", label="b vs. x", ax=ax)
df.plot( x="x",y="c", color="g", label="c vs. x", ax=ax)
完全な例:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,6.3, 50)
a = (np.sin(x)+1)*3
b = (np.cos(x)+1)*3
c = np.ones_like(x)*3
d = np.exp(x)/100.
df = pd.DataFrame({"x":x, "a":a, "b":b, "c":c, "d":d})
ax = df.plot(kind="scatter", x="x",y="a", color="b", label="a vs. x")
df.plot(x="x",y="b", color="r", label="b vs. x", ax=ax)
df.plot( x="x",y="c", color="g", label="c vs. x", ax=ax)
df.plot( x="d",y="x", color="orange", label="b vs. d", ax=ax)
df.plot( x="a",y="x", color="purple", label="x vs. a", ax=ax)
ax.set_xlabel("horizontal label")
ax.set_ylabel("vertical label")
plt.show()