如何更改 displot 中的直方图条形宽度

Jul*_*iaz 3 python histogram seaborn displot

我正在使用seaborn 的displot 来获取堆积条形图。这是我的代码:

g = sns.displot(data=df, x='collection_year', hue='WB_Income group', multiple='stack',col="ena_species",col_wrap=6,facet_kws={'sharey': False, 'sharex': False})
Run Code Online (Sandbox Code Playgroud)

这是输出 在此输入图像描述

如何增加条形的宽度?

Tre*_*ney 5

  • 在这种情况下,x 轴是连续的,就像典型的直方图一样。
  • 可以通过设置discrete=True或设置bins=以匹配 中唯一值的数量来解决此问题'year',这会导致 x 刻度仅对应于传递到独立轴的值。
  • 测试于python 3.10, pandas 1.4.3, matplotlib 3.5.1,seaborn 0.11.2

导入和示例数据框

import pandas as pd
import numpy as np
import seaborn as sns

# create sample data
np.random.seed(2022)
rows = 10000
data = {'year': np.random.choice(list(range(1985, 2025)), size=rows),
        'income': np.random.choice(['high', 'upper middle', 'lower middle', 'low'], size=rows),
        'species': np.random.choice(list(string.ascii_lowercase[:14]), size=rows)}
df = pd.DataFrame(data)

# display(df.head())
   year        income species
0  2013  upper middle       m
1  2009  lower middle       g
2  2003  lower middle       h
3  2009  upper middle       g
4  2001  lower middle       m
Run Code Online (Sandbox Code Playgroud)
  • 示例图的每个条形之间有较大的空间,只能通过设置 来重现bins=160,该设置是 1985 - 2025 年数的 4 倍。
  • 数据中可能有一些'year'在OP中不明显的东西。
g = sns.displot(data=df, x='year', hue='income', multiple='stack', col="species", col_wrap=6, bins=160, facet_kws={'sharey': False, 'sharex': False})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 可以通过设置bins匹配数据中的年数来解决该问题。
g = sns.displot(data=df, x='year', hue='income', multiple='stack', col="species", col_wrap=6, bins=40, facet_kws={'sharey': False, 'sharex': False})
Run Code Online (Sandbox Code Playgroud)
  • bins该问题也可以通过删除和设置来解决discrete=True
g = sns.displot(data=df, x='year', hue='income', multiple='stack', col="species", col_wrap=6, discrete=True, facet_kws={'sharey': False, 'sharex': False})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 设置bins为小于唯一值数量的数字'year'将生成一个直方图,其中每个条形包含多个年份。
g = sns.displot(data=df, x='year', hue='income', multiple='stack', col="species", col_wrap=6, bins=20, facet_kws={'sharey': False, 'sharex': False})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述