Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat plot taburan dengan data kategori dalam Pandas menggunakan matplotlib?

Bagaimana untuk membuat plot taburan dengan data kategori dalam Pandas menggunakan matplotlib?

Susan Sarandon
Susan Sarandonasal
2024-11-18 08:55:03843semak imbas

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

Mencipta Plot Taburan yang Dikategorikan oleh Kunci dalam Bingkai Data Pandas

Dalam visualisasi data, plot taburan biasanya digunakan untuk membezakan hubungan antara pembolehubah berangka. Walau bagaimanapun, apabila terdapat pembolehubah kategori tambahan yang menyumbang kepada analisis, ia menjadi perlu untuk mewakilinya dalam plot serakan. Soalan ini meneroka cara yang cekap untuk memplot dua pembolehubah sambil menyampaikan yang ketiga sebagai kategori diskret.

Pada mulanya, percubaan dibuat menggunakan df.groupby, tetapi ia tidak menghasilkan hasil yang diingini. Contoh DataFrame yang disediakan berfungsi untuk menggambarkan isu:

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()

Pendekatan ini berjaya mewarnai penanda mengikut lajur 'key1', tetapi ia tidak mempunyai legenda untuk membezakan kategori. Untuk mencapai kedua-duanya, kaedah berbeza diperlukan.

Penyelesaiannya ialah menggunakan plot dan bukannya berselerak, kerana plot lebih sesuai untuk kategori diskret:

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()

Kod ini menghasilkan plot serakan dengan setiap kategori diwakili oleh penanda tersendiri dan legenda yang melabelkan kategori dengan jelas.

Untuk rupa yang lebih tersuai, anda boleh menggabungkan gaya Pandas dengan mengemas kini rcParams dan menggunakan penjana warnanya:

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()

Pengubahsuaian ini akan memberikan plot gaya Pandas klasik dengan skema warna yang lebih menarik secara visual.

Atas ialah kandungan terperinci Bagaimana untuk membuat plot taburan dengan data kategori dalam Pandas menggunakan matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn