如何使用 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 DataFrames 中建立按鍵分類的散佈圖

在資料視覺化中,散佈圖通常用於辨別數值變數間的關係。然而,當有其他分類變數有助於分析時,有必要在散佈圖中表示它們。本問題探討了一種繪製兩個變數的有效方法,同時將第三個變數作為離散類別來表達。

最初,嘗試使用 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()
登入後複製

此程式碼產生散點圖每個類別都由獨特的標記和清楚地標記類別的圖例表示。

要獲得更自訂的外觀,您可以透過更新來合併Pandas 風格rcParams 並利用其顏色產生器:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板