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!