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

Susan Sarandon
Lepaskan: 2024-11-18 08:55:03
asal
842 orang telah melayarinya

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()
Salin selepas log masuk

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()
Salin selepas log masuk

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()
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan