【问题标题】:Bar width changing when stacking Seaborn distplot堆叠 Seaborn distplot 时条形宽度发生变化
【发布时间】:2017-07-19 05:00:16
【问题描述】:

我正在尝试使用 Seaborn 制作条形图,但是当我堆叠图时,条形宽度不均匀。我想让它们都一样,或者更好,第一个比其他的大(这是第一个的分解)。

这是我的代码的模拟示例:

import pandas as pd
import seaborn as sns

Groups= pd.DataFrame([['E', 5L],['S0', 5L],['S', 4L],['S', 6L],['E', 4L],['S', 4L],
       ['E', 4L],['S', 4L],['S', 4L],['S0', 4L],['E', 5L],['S', 4L],['S', 4L],
       ['S', 4L],['E', 4L],['E', 5L],['E', 4L],['S0', 4L],['E', 4L],['S', 5L],
       ['E', 4L],['E', 4L],['S', 4L],['E', 4L],['S', 4L],['E', 4L],['E', 4L],
       ['S', 4L],['E', 4L],['E', 4L],['S0a', 6L],['E', 4L],['S0', 4L],['S0a', 4L],
       ['E', 5L],['E', 4L],['S0', 4L],['S', 6L],['S', 4L],['E', 4L],['E', 5L],
       ['E', 4L],['E', 4L],['E', 5L],['S', 5L]], columns=['MorphCen', 'NbGal'])


shift = 0.12
local_bins = (CompactGroups_raw['NbGal'].max()-CompactGroups_raw['NbGal'].min()+1)*10

ax1=sns.distplot(Groups['NbGal'], bins=local_bins, kde=False,rug=False, label="All")
ax1=sns.distplot(Groups['NbGal'].loc[Groups['MorphCen']=='S']+shift, 
                bins=local_bins, kde=False,rug=False,color='b', label="$S$ central")
ax1=sns.distplot(Groups['NbGal'].loc[Groups['MorphCen']=='E']+2*shift, 
                 bins=local_bins, kde=False,rug=False,color='r', label="$E$ central")
ax1=sns.distplot(Groups['NbGal'].loc[Groups['MorphCen']=='S0']+3*shift, 
                 bins=local_bins, kde=False,rug=False,color='g', label="$S_0$ central")
ax1=sns.distplot(Groups['NbGal'].loc[~Groups['MorphCen'].isin(['S','E','S0'])]+4*shift, 
                 bins=local_bins, kde=False,rug=False, color='y', label="Other central")

ax1.set(xlim=[Groups['NbGal'].min(), Groups['NbGal'].max()+1]);
ax1.set_ylabel('Object number')
loc1 = plticker.MultipleLocator(base=1.0) 
ax1.xaxis.set_major_locator(loc1)
ax1.legend();

我得到的是这个数字:

如何管理宽度?我以为它是由 bin 自动设置的,但是让所有 bin 都相同并不能解决问题。

【问题讨论】:

  • 设置相同数量的 bin 与设置相同宽度的 bin 数据范围不同。
  • 好的,我明白了。所以我使用 , hist_kws={"range": [min_NbGals,max_NbGals]} 并且它有效。干杯!

标签: python seaborn


【解决方案1】:

好的,感谢 mwaskom,它可以工作了。这是正确的代码:

min_NbGals = CompactGroups_raw['NbGal'].min()
max_NbGals = CompactGroups_raw['NbGal'].max()

local_bins = (max_NbGals-min_NbGals+1)*10
ax1=sns.distplot(CompactGroups_raw['NbGal'], bins=local_bins, hist_kws={"range": [min_NbGals,max_NbGals]}, kde=False,rug=False, color='k', label="All")
ax1=sns.distplot(CompactGroups_raw['NbGal'].loc[CompactGroups_raw['MorphCen']=='S']+shift, 
                bins=local_bins, hist_kws={"range": [min_NbGals,max_NbGals]}, kde=False,rug=False,color='b', label="$S$ central")
ax1=sns.distplot(CompactGroups_raw['NbGal'].loc[CompactGroups_raw['MorphCen']=='E']+2*shift, 
                 bins=local_bins, hist_kws={"range": [min_NbGals,max_NbGals]}, kde=False,rug=False,color='r', label="$E$ central")
ax1=sns.distplot(CompactGroups_raw['NbGal'].loc[CompactGroups_raw['MorphCen']=='S0']+3*shift, 
                 bins=local_bins, hist_kws={"range": [min_NbGals,max_NbGals]}, kde=False,rug=False,color='g', label="$S_0$ central")
ax1=sns.distplot(CompactGroups_raw['NbGal'].loc[~CompactGroups_raw['MorphCen'].isin(['S','E','S0'])]+4*shift, 
                 bins=local_bins, hist_kws={"range": [min_NbGals,max_NbGals]}, kde=False,rug=False, color='y', label="Other central")
ax1.set(xlim=[CompactGroups_raw['NbGal'].min(), CompactGroups_raw['NbGal'].max()+1]);
ax1.legend();

【讨论】:

  • 这里的解决方案是什么?有这么多CompactGroups_raw
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2022-01-16
  • 2019-12-29
  • 1970-01-01
  • 2020-06-16
  • 2018-03-20
  • 2023-01-31
相关资源
最近更新 更多