我有一个带有分类数据的数据框:
colour direction
1 red up
2 blue up
3 green down
4 red left
5 red right
6 yellow down
7 blue down
Run Code Online (Sandbox Code Playgroud)
我想生成一些图表,如基于类别的饼图和直方图.是否可以不创建虚拟数字变量?就像是
df.plot(kind='hist')
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 138
你可以简单地使用value_counts这个系列:
df['colour'].value_counts().plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
ste*_*boc 18
像这样 :
df.groupby('colour').size().plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
Pri*_*mer 16
您可能会mosaic从statsmodels中找到有用的图表.这也可以为差异提供统计突出显示.
from statsmodels.graphics.mosaicplot import mosaic
plt.rcParams['font.size'] = 16.0
mosaic(df, ['direction', 'colour']);
Run Code Online (Sandbox Code Playgroud)

但要注意0大小的单元格 - 它们会导致标签出现问题.
有关详情,请参阅此答案
Rom*_*rac 10
要将多个分类特征绘制为同一图上的条形图,我建议:
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()
Run Code Online (Sandbox Code Playgroud)
您也可以使用countplotfrom seaborn。此程序包可pandas用于创建高级绘图界面。它为您免费提供了良好的样式和正确的轴标签。
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')
Run Code Online (Sandbox Code Playgroud)
它还支持一些技巧,以正确的颜色为条形着色
sns.countplot(df['colour'],
palette={color: color for color in df['colour'].unique()})
Run Code Online (Sandbox Code Playgroud)
小智 6
您只需将选项设置value_counts为即可使用。这将保留类别的顺序sortFalse
df['colour'].value_counts(sort=False).plot.bar(rot=0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86820 次 |
| 最近记录: |