2017-08-06 13 views
0

私は海辺のバイオリンプロットを左側に、マットプラトリブを右側に置いています。バイオリンプロットのアウトライアーや極端な値のカット方法

ご覧のとおり、効果がないshowextrema = TrueまたはFalseの場合でも、matplotlibはいくつかの値/データを削除します。どのように私はmatplotlibがそれらの値を維持するためにバイオリンプロットを使用するようにするのですか?

import matplotlib.pyplot as plt 
import seaborn as sns 

a = [195.0, 245.0, 142.0, 237.0, 153.0, 238.0, 168.0, 145.0, 229.0, 138.0, 176.0, 116.0, 252.0, 148.0, 199.0, 162.0, 134.0, 163.0, 130.0, 339.0, 152.0, 208.0, 152.0, 192.0, 163.0, 249.0, 113.0, 176.0, 123.0, 189.0, 150.0, 207.0, 184.0, 153.0, 228.0, 153.0, 170.0, 118.0, 302.0, 197.0, 211.0, 159.0, 228.0, 147.0, 166.0, 156.0, 167.0, 147.0, 126.0, 155.0, 138.0, 159.0, 139.0, 111.0, 133.0, 134.0, 131.0, 156.0, 240.0, 207.0, 150.0, 207.0, 265.0, 151.0, 173.0, 157.0, 261.0, 186.0, 195.0, 158.0, 272.0, 134.0, 221.0, 131.0, 252.0, 148.0, 178.0, 206.0, 146.0, 217.0, 159.0, 190.0, 156.0, 172.0, 159.0, 141.0, 167.0, 168.0, 218.0, 191.0, 207.0, 164.0] 

fig, axes = plt.subplots() 

# Seaborn violin plot 
sns.violinplot(data=a, width=0.6, color="w") 

# Matplotlib violin plot 
axes.violinplot(a, showmeans=True, showmedians=False, showextrema=False, widths = 0.6) 
axes.set_xticks([y+1 for y in range(2)]) 
plt.show() 

enter image description here

+0

リストの最小値は111です。なぜプロットをそれよりも低くすると思われますか?または、なぜデータが削除されたと主張しますか? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnestはい、それは本当です。なぜカーネル密度の推定値が途絶えているのかを明確にする必要があります。どうすればそれを外挿することができますか? – Anderson

答えて

1

KDEはmatplotlibのをviolinplotに対してプロットされる範囲は、入力された値の範囲です。これはコードのかなり深いところで定義されているので、簡単に変更することはできません。

これに対して、シーボーンのバイオリンプロットでは、KDEの範囲を適切に制御できます。デフォルトでは、表示されているKDEカーブを、プロットの両側にあるKDEの帯域幅の2倍に拡大します。これはcut引数によってsns.violinplot(, cut=2)に変更され、デフォルトは2になります。 cut=0を設定すると、matplotlib violinplotと同じ結果が得られます。手動でKDEの帯域幅を浮動小数点として選択するオプションであるsns.violinplot(..., bw = 0.2, cut=2)は、バイオリンプロットの表示方法を非常によく制御します。

結論として、KDE曲線の範囲を細かく制御する必要がある場合は、海底のバイオリンプロットを使用してください。

関連する問題