【问题标题】:seaborn countplot doesn't show all categoriesseaborn countplot 不显示所有类别
【发布时间】:2023-03-19 20:19:01
【问题描述】:

我正在尝试使用 countplot 在堆积条形图中绘制子类别。我遇到的问题是堆积条没有显示所有类别

import seaborn as sns
from matplotlib import pyplot
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]

fig, ax = pyplot.subplots(figsize=(20,15))
g = sns.countplot(ax=ax,
            y="LV1",
            hue="LV2",
            palette=sns.color_palette("hls", 8) + sns.color_palette("Paired") + sns.color_palette(flatui),
            dodge=False,
            data=plot_data);
g.legend(loc='center left', bbox_to_anchor=(1, 0.6), ncol=3)

描述数据框内容:

LV1 是包含上级类别的列,LV2 是子类别。 这里有一个例子,你可以看到 R 只有两个子类别,但它不是有 21 个子类别,其中前 1 有 20 次出现,前 2 和 3 有 9 次出现。

【问题讨论】:

标签: python bar-chart seaborn


【解决方案1】:

自您调用dodge=False 以来,可能是条形相互重叠,较大的条与所有其他较小的条重叠。如果您将plot_data 数据限制为仅R 类别和dodge=True,则所有类别都应该存在。由于计数图不堆叠,因此请考虑堆叠条形图而不是计数图,这或多或少与分类变量的直方图同义。

要进行演示,请参见以下可重现的示例:

数据

import numpy as np
import pandas as pd

from  matplotlib import pyplot
import seaborn as sns

### DATA BUILD
data_tools = ['sas', 'stata', 'spss', 'python', 'r', 'julia']
np.random.seed(12220)
random_df = pd.DataFrame({'group': np.random.choice(data_tools, 500),
                          'int': np.random.randint(1, 10, 500)})

第一个图 (看看只有 int=6 处的大“stata”栏如何显示)

flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]

fig, ax = pyplot.subplots(figsize=(8,4))

g = sns.countplot(ax=ax,
                  y="int",
                  hue="group",
                  palette=(sns.color_palette("hls", 8) + 
                           sns.color_palette("Paired") + 
                           sns.color_palette(flatui)),
                  dodge=False,
                  data=random_df)

g.legend(loc='upper center', ncol=3)

第二个图 (在 int=6 的情况下仅显示“stata”处的最大条之外的其他类别)

fig, ax = pyplot.subplots(figsize=(8,4))

g = sns.countplot(ax=ax,
                  y="int",
                  hue="group",
                  palette=(sns.color_palette("hls", 8) + 
                           sns.color_palette("Paired") + 
                           sns.color_palette(flatui)),
                  dodge=True,                              # CHANGING DODGE PARAM
                  data=random_df.query("int==6"))          # FILTERING DATA

g.legend(loc='upper center',ncol=3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2023-03-08
    • 1970-01-01
    • 2020-03-23
    • 2016-05-27
    • 2017-07-22
    • 2023-01-23
    相关资源
    最近更新 更多