Saya memiliki bingkai data dengan data kategorikal:
colour direction
1 red up
2 blue up
3 green down
4 red left
5 red right
6 yellow down
7 blue down
Saya ingin membuat beberapa grafik, seperti diagram lingkaran dan histogram berdasarkan kategori. Apakah mungkin tanpa membuat variabel numerik tiruan? Sesuatu seperti
df.plot(kind='hist')
df["colour"].value_counts().plot(kind='bar')
sebagai alternatif umumdf['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]
Anda mungkin menemukan
mosaic
plot yang berguna dari statsmodels. Yang juga dapat memberikan sorotan statistik untuk varians.from statsmodels.graphics.mosaicplot import mosaic plt.rcParams['font.size'] = 16.0 mosaic(df, ['direction', 'colour']);
Tetapi berhati-hatilah dengan sel berukuran 0 - mereka akan menyebabkan masalah dengan label.
Lihat jawaban ini untuk detailnya
sumber
seperti ini :
df.groupby('colour').size().plot(kind='bar')
sumber
Anda juga bisa menggunakan
countplot
dariseaborn
. Paket ini dibuatpandas
untuk membuat antarmuka plot tingkat tinggi. Ini memberi Anda gaya yang baik dan label sumbu yang benar secara gratis.import pandas as pd import seaborn as sns sns.set() df = pd.DataFrame({'colour': ['red', 'blue', 'green', 'red', 'red', 'yellow', 'blue'], 'direction': ['up', 'up', 'down', 'left', 'right', 'down', 'down']}) sns.countplot(df['colour'], color='gray')
Ini juga mendukung pewarnaan batang dengan warna yang tepat dengan sedikit trik
sns.countplot(df['colour'], palette={color: color for color in df['colour'].unique()})
sumber
Untuk memplot beberapa fitur kategorikal sebagai diagram batang pada plot yang sama, saya sarankan:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame( { "colour": ["red", "blue", "green", "red", "red", "yellow", "blue"], "direction": ["up", "up", "down", "left", "right", "down", "down"], } ) categorical_features = ["colour", "direction"] fig, ax = plt.subplots(1, len(categorical_features)) for i, categorical_feature in enumerate(df[categorical_features]): df[categorical_feature].value_counts().plot("bar", ax=ax[i]).set_title(categorical_feature) fig.show()
sumber