猿问

seaborn countplot 不显示所有类别

我正在尝试使用 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 次出现。

宝慕林4294392
浏览 318回答 1
1回答

largeQ

可能的条相互重叠,并且较大的条叠加所有其他较小的条,因为您调用dodge=False. 如果您将plot_data数据限制为仅R带有 的类别dodge=True,则所有类别都应存在。由于计数图不堆叠,请考虑堆叠条形图而不是计数图,这或多或少与分类变量的直方图同义。为了演示,请参见以下可重现的示例:数据import numpy as npimport pandas as pdfrom  matplotlib import pyplotimport seaborn as sns### DATA BUILDdata_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 DATAg.legend(loc='upper center',ncol=3)
随时随地看视频慕课网APP

相关分类

Python
我要回答