2017-07-18 27 views
0

我正在試圖製作Seaborn的條形圖,但是當我堆積情節時,條寬不均勻。我想讓他們都相同或更好,第一個比其他人大(這是第一個分解)。堆疊Seaborn distplot時,條寬會發生變化

這是一個模擬的樣品我的代碼:

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(); 

我得到的是這個數字:

Uneven bars

如何管理寬度是多少?我認爲它是由垃圾箱自動設置的,但是所有垃圾箱都一樣,並不能解決問題。

+0

設置相同數量的bin不同於設置相同寬度的bin的數據範圍是不同的。 – mwaskom

+0

好的,我明白了。所以我使用''hist_kws = {「range」:[min_NbGals,max_NbGals]}'它可以工作。乾杯! – Matt

回答

0

好的,感謝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(); 
+0

這很好......但是「箱子」也可以是一個箱子邊緣的數組...... – mwaskom

相關問題