matplotlib を使用して Pandas でカテゴリデータを含む散布図を作成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-18 08:55:03
オリジナル
842 人が閲覧しました

How to create a scatter plot with categorical data in Pandas using matplotlib?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート