web-dev-qa-db-ja.com

ポイントを使用してパンダのデータフレームの2列をプロットする方法は?

パンダのデータフレームがあり、ある列の値と別の列の値をプロットしたいと思います。幸いなことに、データフレームに関連付けられたplotメソッドがあり、必要なことを実行しているようです。

df.plot(x='col_name_1', y='col_name_2')

残念ながら、プロットスタイル(kindパラメーターの後に here がリストされている)の中にはポイントがないように見えます。線や棒、さらには密度を使用できますが、ポイントは使用できません。この問題の解決に役立つ回避策はありますか。

76
Roman

df.plot を呼び出すときに、プロットされた行のstyleを指定できます。

df.plot(x='col_name_1', y='col_name_2', style='o')

style引数は、dictまたはlistにすることもできます。例:

import numpy as np
import pandas as pd

d = {'one' : np.random.Rand(10),
     'two' : np.random.Rand(10)}

df = pd.DataFrame(d)

df.plot(style=['o','rx'])

受け入れられるすべてのスタイル形式は、 matplotlib.pyplot.plot のドキュメントにリストされています。

Output

91
sodd

このため(およびほとんどのプロット)、matplotlibのPandasラッパーに依存しません。代わりに、matplotlibを直接使用します。

import matplotlib.pyplot as plt
plt.scatter(df['col_name_1'], df['col_name_2'])
plt.show() # Depending on whether you use IPython or interactive mode, etc.

また、たとえばdf.col_name_1.valuesを使用して、列の値のNumPy配列にアクセスできることを忘れないでください。

ミリ秒精度のタイムスタンプ値の列の場合、Pandasのデフォルトプロットでこれを使用すると問題が発生しました。オブジェクトをdatetime64型に変換しようとして、厄介な問題も発見しました:< Timestamp列の値にattr astype があるかどうかを尋ねると、Pandasが間違った結果を出します> 。

69
ely

Pandasは、matplotlibを基本プロットのライブラリとして使用します。あなたの場合の最も簡単な方法は次を使用します:

import pandas as pd
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.Rand(20),
      'col_name_2': np.random.Rand(20)}
df= pd.DataFrame(sample_data)
df.plot(x='col_name_1', y='col_name_2', style='o')

enter image description here

ただし、matplotlib.の基本レベルに入らずに、よりカスタマイズされたプロットが必要な場合は、代替ソリューションとしてseabornを使用することをお勧めします。この場合、ソリューションは次のようになります。

import pandas as pd
import seaborn as sns
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.Rand(20),
      'col_name_2': np.random.Rand(20)}
df= pd.DataFrame(sample_data)
sns.scatterplot(x="col_name_1", y="col_name_2", data=df)

enter image description here

1
Dr. Arslan