2016-02-01 11 views
5

いくつかのカテゴリ(centrality)でグループ化され、他のいくつかの色(model)で色分けされた一連のスコア分布(score)を比較したいと思います。私はseabornで次のことを試してみた:私はこのプロットを持っているいくつかの問題があります調整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") 

  • があり、外れ値の大規模な量があると私は、彼らがここに描かれている方法を好きではありません。それらを取り除くことはできますか?外観を変更して、よりぎこちないようにすることはできますか?彼らの色がボックスの色と一致するように少なくとも私はそれらを色付けることができますか?他のすべての分布がoriginalの分布と比較しなければならないので、
  • modeloriginalは特別です。これはプロットに視覚的に反映されるべきです。 originalを各グループの最初のボックスにすることはできますか?何とかそれを相殺することができますか?各original分布の中央を通って、箱の基を介して水平線を描画することは可能でしょうか? scoreの一部の値が非常に小さい
  • 、どのようにそれらを表示するには、y軸の適切なスケーリングを行うには?

enter image description here

EDIT:ここ

ログスケールy軸と一例である - にもまだ理想。なぜ、いくつかのボックスはローエンドで切断されたように見えますか?

enter image description here

+1

青い外れ値はマットフロッティブのバグであり、海軍を更新することで回避できます。しかし、私は確かに異常値を削除するだけではありません! – mwaskom

+2

y変数に[log-scaling](http://stanford.edu/~mwaskom/software/seaborn/examples/horizo​​ntal_boxplot.html)を試しましたか? – mwaskom

+0

@mwaskomはい、それはプロットの一番上に大きな値のバーを "圧縮"します。妥協点、つまり軸の一部だけのログスケーリングがありますか? – clstaudt

答えて

14

外れ値表示

あなたがflierpropsを設定することにより、外れ値の表示を調整することができるようにあなたは、あなたが(documentationを参照)plt.boxplotに渡すことができるseaborn.boxplotに任意の引数を渡すことができるはずです。 Hereは、外れ値でできることのいくつかの例です。あなたがそれらを表示したくない場合は

、あなたは

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

を行うことができます。また、彼らはライトグレーそうのように作ることができます:グループの

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

注文

hue_orderでグループの順序を手動で設定することができます。

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

y軸のスケーリング

あなただけのすべてのyの値の最小値と最大値を取得し、それに応じてy_limを設定することができますか?このような何か:

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

EDIT:自動y_lim範囲は、すでにすべての値が含まれますので、この最後の点は本当に意味がありませんが、私はこれらの設定を調整する方法の例として、それを残しています。コメントで述べたように、ログスケールはおそらくもっと意味があります。