使用pandas和matplotlib绘制分类数据

Iva*_*van 71 python pandas

我有一个带有分类数据的数据框:

     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)

在此输入图像描述

  • 是的,您可以明确指定 x 标签的顺序,例如 `df['colour'].value_counts()[['green', 'yellow', 'blue', 'red']]` (3认同)
  • 是否可以指定x标签的顺序? (2认同)

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)

在此处输入图片说明


Jar*_*rno 8

您也可以使用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)

链接到图像