web-dev-qa-db-ja.com

seaborn.boxplotの調整

スコアの分布セット(score)を比較し、いくつかのカテゴリ(centrality)でグループ化し、他のカテゴリ(model)で色分けします。私はシーボーンで次のことを試しました:

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

このプロットにはいくつかの問題があります。

  • 異常値が大量にあり、ここでそれらがどのように描かれるかが気に入らない。それらを削除できますか?外観を変更して、すっきりと表示できますか?少なくとも、ボックスの色と一致するように色を付けることはできますか?
  • modeloriginalは特別です。これは、他のすべての分布をoriginalの分布と比較する必要があるためです。これは視覚的にプロットに反映されるはずです。 originalをすべてのグループの最初のボックスにできますか?何らかの方法でオフセットまたはマークを付けることはできますか?各original分布の中央値とボックスのグループを通る水平線を引くことは可能でしょうか?
  • scoreの値のいくつかは非常に小さいですが、y軸を適切にスケーリングしてそれらを表示するにはどうすればよいですか?

enter image description here

編集:

これは、対数スケールのy軸を持つ例です-これもまだ理想的ではありません。一部のボックスがローエンドで切れているように見えるのはなぜですか?

enter image description here

17
clstaudt

異常値表示

seaborn.boxplotに渡すことができる引数をplt.boxplotに渡すことができるはずです( documentation を参照)。flierpropsを設定することで、外れ値の表示を調整できます。 ここ は、外れ値でできることの例です。

それらを表示したくない場合は、行うことができます

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

編集:この最後のポイントは、自動y_lim範囲にすべての値がすでに含まれているため、実際には意味がありませんが、これらの設定を調整する方法の例として残しています。コメントで述べたように、おそらくログスケーリングはより意味があります。

42
Lisa