Pythonのデータフレームmatplotlib
から使用して一連の散布図を作成するための最良の方法は何ですか?pandas
たとえば、df
関心のある列がいくつかあるデータフレームがある場合、通常はすべてを配列に変換します。
import matplotlib.pylab as plt
# df is a DataFrame: fetch col1 and col2
# and drop na rows if any of the columns are NA
mydata = df[["col1", "col2"]].dropna(how="any")
# Now plot with matplotlib
vals = mydata.values
plt.scatter(vals[:, 0], vals[:, 1])
プロットする前にすべてを配列に変換する際の問題は、データフレームから抜け出すことを余儀なくされることです。
完全なデータフレームを持つことがプロットに不可欠である次の2つのユースケースを検討してください。
たとえば
col3
、呼び出しでプロットした対応する値のすべての値を確認しscatter
、各ポイント(またはサイズ)にその値で色を付けたい場合はどうでしょうか。戻って、のna以外の値を引き出しcol1,col2
、対応する値を確認する必要があります。データフレームを保持しながらプロットする方法はありますか?例えば:
mydata = df.dropna(how="any", subset=["col1", "col2"]) # plot a scatter of col1 by col2, with sizes according to col3 scatter(mydata(["col1", "col2"]), s=mydata["col3"])
同様に、いくつかの列の値に応じて、各ポイントを異なる方法でフィルタリングまたは色付けしたいとします。たとえば、特定のカットオフを満たすポイントのラベルを
col1, col2
それらの横に自動的にプロットしたり(ラベルがdfの別の列に格納されている場合)、Rのデータフレームで行うように、これらのポイントに異なる色を付けたりする場合はどうでしょうか。例:mydata = df.dropna(how="any", subset=["col1", "col2"]) myscatter = scatter(mydata[["col1", "col2"]], s=1) # Plot in red, with smaller size, all the points that # have a col2 value greater than 0.5 myscatter.replot(mydata["col2"] > 0.5, color="red", s=0.5)
これはどのように行うことができますか?
編集クルーバムへの返信:
最善の方法は、各条件(subset_a
、などsubset_b
)を個別にプロットすることです。多くの条件がある場合、たとえば、散乱を4種類以上のポイントに分割し、それぞれを異なる形状/色でプロットしたい場合はどうでしょうか。条件a、b、cなどをエレガントに適用し、最後のステップとして「残り」(これらの条件のいずれにも当てはまらないもの)をプロットするようにするにはどうすればよいですか?
col1,col2
同様に、に基づいて異なる方法でプロットする例ではcol3
、間の関連付けを壊すNA値がある場合はどうなりcol1,col2,col3
ますか?たとえば、すべてのcol2
値をそれらの値に基づいてプロットしたいが、一部の行にはまたはのいずれかcol3
にNA値があり、最初に使用する必要がある場合です。だからあなたはするでしょう:col1
col3
dropna
mydata = df.dropna(how="any", subset=["col1", "col2", "col3")
次に、次のようにプロットできます。の値を使用してmydata
間の分散をプロットします。しかし、の値はあるがNAであるいくつかのポイントが欠落し、それらはまだプロットする必要があります...では、基本的にデータの「残り」、つまりフィルター処理されたセットにないポイントをどのようにプロットしますか?col1,col2
col3
mydata
col1,col2
col3
mydata