为了账号安全,请及时绑定邮箱和手机立即绑定

seaborn countplot 不显示所有类别

seaborn countplot 不显示所有类别

宝慕林4294392 2022-07-05 19:24:57
我正在尝试使用 countplot 在堆积条形图中绘制子类别。我遇到的问题是堆积条没有显示所有类别import seaborn as snsfrom matplotlib import pyplotflatui = ["#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 次出现。
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

可能的条相互重叠,并且较大的条叠加所有其他较小的条,因为您调用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)

//img1.sycdn.imooc.com//62c41ff40001dc1b04840258.jpg

第二个图 (在 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)

//img1.sycdn.imooc.com//62c4200000018e4204810257.jpg

查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号