2016-02-01 9 views
5

Bazı kategoriler (centrality) tarafından gruplandırılmış ve diğer bazı (model) tarafından renklendirilmiş bir dizi puan dağılımını (score) karşılaştırmak istiyorum. Ben Seaborn aşağıdaki denedim:Tweaking seaborn.boxplot

plt.figure(figsize=(14,6)) 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1)) 
seaborn.despine(offset=10, trim=True) 
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight") 

Bu arsa ile sahip bazı sorunlar vardır:

  • Orada aykırı büyük miktarda ve ben burada çizilir nasıl sevmiyorum . Onları kaldırabilir miyim? Görünümü daha az dağınıklık gösterecek şekilde değiştirebilir miyim? En azından, renklerinin kutu rengiyle eşleşmesi için renklendirebilir miyim?
  • model değeri original değeri, tüm diğer dağıtımların original dağıtımıyla karşılaştırılması gerektiğinden özeldir. Bu görsel olarak arsaya yansıtılmalıdır. Her grubun ilk kutusunu original yapabilir miyim? Bir şekilde farklı şekilde dengeleyebilir veya işaretleyebilir miyim? Her bir original dağıtımının ortasından ve kutu grubu içinden yatay bir çizgi çizmek mümkün mü?
  • score'un bazı değerleri çok küçüktür, bunları göstermek için y ekseninin düzgün ölçeklendirmesi nasıl yapılır?

enter image description here

DÜZENLEME:

Burada

bir log-ölçekli y ekseni ile bir örnektir - henüz mevcut değil, aynı zamanda. Neden bazı kutular düşük uçta kesilmiş gibi görünüyor?

enter image description here

+1

Mavi aykırılar bir matplotlib hatasıdır ve denizanağınızı güncelleyerek önlenebilirler. Ama ben kesinlikle aykırıları kaldırmazdım! – mwaskom

+2

[log-scaling] (http://stanford.edu/~mwaskom/software/seaborn/examples/horizontal_boxplot.html) y değişkenini denediniz mi? – mwaskom

+0

@mwaskom Evet, ancak bu, arsaların en üstünde daha büyük değerlerin çubuklarını "sıkıştırır". Bir uzlaşma var mı, yani eksenin sadece bir kısmı için log-ölçekleme var mı? – clstaudt

cevap

14

Aykırı ekran

Eğer flierprops ayarlayarak aykırı görünümünü ayarlayabilirsiniz böylece Sen (documentation bakınız) plt.boxplot geçebileceğini seaborn.boxplot koyan iddialarda geçmesi gerekir . Here, aykırı değerlerinizle yapabileceğiniz şeylerin bazı örnekleridir. Bunları görüntülemek için istemiyorsanız

, sen

seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       showfliers=False) 

yapabileceğini veya bunları açık gri şöyle yapabiliriz: gruplarından

flierprops = dict(markerfacecolor='0.75', markersize=5, 
       linestyle='none') 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       flierprops=flierprops) 

al

Grupların sırasını manuel olarak hue_order ile ayarlayabilirsiniz.

seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       hue_order=["original", "Havel..","etc"]) 

y ekseni Ölçekleme

Sadece tüm y değerlerinin minimum ve maksimum değerleri almak ve buna göre y_lim ayarlayabilirsiniz?Böyle bir şey:

y_values = data["scores"].values 
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, 
       y_lim=(np.min(y_values),np.max(y_values))) 

DÜZENLEME: otomatik y_lim aralık zaten tüm değerleri içerecek beri bu son nokta gerçekten mantıklı değil, ama sadece bu ayarlarını nasıl bir örnek olarak bırakıyorum . Yorumlarda belirtildiği gibi, log-scaling muhtemelen daha mantıklı.