ホームページ >バックエンド開発 >Python チュートリアル >matplotlib を使用して Pandas でカテゴリデータを含む散布図を作成するにはどうすればよいですか?
Pandas DataFrame のキーによって分類された散布図の作成
データ視覚化では、散布図は数値変数間の関係を識別するためによく使用されます。ただし、分析に寄与する追加のカテゴリ変数がある場合は、それらを散布図内で表現する必要があります。この質問では、2 つの変数をプロットし、3 番目の変数を個別のカテゴリとして伝える効率的な方法を探ります。
最初は df.groupby を使用して試みましたが、望ましい結果は得られませんでした。提供されているサンプル DataFrame は、この問題を説明するために役立ちます。
import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(np.random.normal(10, 1, 30).reshape(10, 3), index=pd.date_range('2010-01-01', freq='M', periods=10), columns=('one', 'two', 'three')) df['key1'] = (4, 4, 4, 6, 6, 6, 8, 8, 8, 8) fig1 = plt.figure(1) ax1 = fig1.add_subplot(111) ax1.scatter(df['one'], df['two'], marker='o', c=df['key1'], alpha=0.8) plt.show()
このアプローチでは、'key1' 列に従ってマーカーに色が付けられますが、カテゴリを区別するための凡例がありません。両方を達成するには、別の方法が必要です。
解決策は、散布図の代わりにプロットを使用することです。プロットは離散カテゴリに適しているためです。
import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(1974) # Generate Data num = 20 x, y = np.random.random((2, num)) labels = np.random.choice(['a', 'b', 'c'], num) df = pd.DataFrame(dict(x=x, y=y, label=labels)) groups = df.groupby('label') # Plot fig, ax = plt.subplots() ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling for name, group in groups: ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name) ax.legend() plt.show()
このコードは散布図を生成します。各カテゴリは、カテゴリを明確にラベル付けする独特のマーカーと凡例で表されます。
外観をよりカスタマイズするには、rcParams を更新し、そのカラー ジェネレーターを利用することで、Pandas スタイルを組み込むことができます。
import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(1974) # Generate Data num = 20 x, y = np.random.random((2, num)) labels = np.random.choice(['a', 'b', 'c'], num) df = pd.DataFrame(dict(x=x, y=y, label=labels)) groups = df.groupby('label') # Plot plt.rcParams.update(pd.tools.plotting.mpl_stylesheet) colors = pd.tools.plotting._get_standard_colors(len(groups), color_type='random') fig, ax = plt.subplots() ax.set_color_cycle(colors) ax.margins(0.05) for name, group in groups: ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name) ax.legend(numpoints=1, loc='upper left') plt.show()
この変更により、プロットはより視覚的に魅力的な配色を備えたクラシックな Pandas スタイルになります。
以上がmatplotlib を使用して Pandas でカテゴリデータを含む散布図を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。