2017-11-17 6 views
1

Seaborn distplotは、複数のプロットされたデータセットの最大範囲をキャプチャするように自動的にy軸を再スケーリングするように設定できますか?seaborn(distplot)yaxisは自動的に再スケーリングされますか?

Seabornを使用してプロットのバッチを実行する場合、最大頻度値を上げずにデータが提供されることは避けられないことがあります。これが起こると、作成されたプロットyaxisはデータをカットします。ただし、データが最大値で提供される場合は、sns.distplot()は問題ありません。

これはMatplotlib.patchesを介して固定または単にax.autoscale()(後に提案してくれてありがとう@ImportanceOfBeingErnest)を呼び出すことによって、しかし、いずれかの "kludgey" と思われることができます...

シンプル加工した例:

# Import modules 
import numpy as np 
from scipy.stats import truncnorm 
import matplotlib.pyplot as plt 
import seaborn as sns; sns.set(color_codes=True) 

# Make some random data (credit: [@bakkal's Answer][3]) 
scale = 3. 
range = 10 
size = 100000 
X = truncnorm(a=-range/scale, b=+range/scale, scale=scale).rvs(size=size) 

# --- first time to show issue 
# Now plot up 1st set of data (with first dataset having high Y values) 
ax= sns.distplot(X*4) 
# Now plot up two more 
for i in np.arange(1, 3): 
    sns.distplot(X*i, ax=ax) 
plt.show() 

 (Issue!)

# --- Second time with a "kludgey" fix 
ax = sns.distplot(X*4) 
# Now plot up two more 
for i in np.arange(1, 3): 
    sns.distplot(X*i, ax=ax) 
# Now force y axis extent to be correct 
ax.autoscale() 
plt.show() 

(Success!)

# --- Third time with increasing max in data provided 
ax= sns.distplot(X) 
# Now plot up two more 
for i in np.arange(2, 4): 
    sns.distplot(X*i, ax=ax) 
plt.show() 

(success too)

+2

seaborn 8.1でこの動作を再現できないため、最も簡単な解決策はseabornパッケージを更新することです。 'ax.autoscale()'を試してみてください。 – ImportanceOfBeingErnest

+1

@ImportanceOfBeingErnestの入力をありがとう。私はあなたのコメントを見る前に[github issue](https://github.com/mwaskom/seaborn/issues/1329)を追加し、それは0.8.1で修正されました。 '' ax.autoscale() ''に言及してくれてありがとうございます。これは[patches](https://matplotlib.org/api/_as_gen/matplotlib.patches.Patch.html)よりも優れています。私はそれをQに加え、あなたに信用します。 – tsherwen

答えて

2

これはSeabornにおける問題(0.8.0)だったと修正がgithub(感謝@mwaskom)に提出されました。

この問題が表示される場合は、Seaborn(> = version 0.8.1)だけを更新してください。

+1

*すべての*ライブラリをリロードしてください。シーボンをリロードするだけでは十分ではありませんでした。 –