2017-01-22 23 views
0

swplplotとregplotをseabornにオーバープロットして、私はswarmplotを通してy = xの行を持つことができます。Overplot seaborn regplotとswarmplot

import matplotlib.pyplot as plt 
import seaborn as sns 

sns.regplot(y=y, x=x, marker=' ', color='k') 
sns.swarmplot(x=x_data, y=y_data) 

プロットするとエラーは発生しませんが、プロットにプロットは表示されません。これをどうすれば解決できますか?

plot

EDIT:私のregplotとswarmplotを重ねてプロットしていない代わりに、同じフレームのプロットが、いくつかの不特定yの量で区切られています。 regplotがswarmplotの呼び出しの上にあるようにそれらをひっくり返すと、regplotはまったく表示されません。

import matplotlib.pyplot as plt 
import seaborn as sns 
import pandas as pd 

df = pd.DataFrame({"x":x_data,"y":y_data}) 

sns.regplot(y="y", x="x", data= df, color='k', scatter_kws={"alpha" : 0.0}) 
sns.swarmplot(y="y", x="x", data= df) 

updated plot

SECOND EDIT:下から2軸ソリューションを見事に動作します!

+0

スワンプロットのx軸は、定量的ではなくカテゴリになっています。なぜあなたはこれをやろうとしていますか? – mwaskom

+0

私はswarmplotの傾向を見せたいと思います。 – morepenguins

+1

それは質問に答えません。あなたはあなたが何をしようとしているのかもっと考えなければなりません。 – mwaskom

答えて

0

スワンプロットとプロットをプロットするアプローチは、基本的にはうまくいきます。

ここでの問題は、空のマーカー(marker = " ")を設定することです。これは、それが表示されないように、regplotを破壊します。明らかに、これは同じグラフにいくつかのものをプロットするときの問題です。空のマーカーが付いた単一のプロットをプロットすると問題はありません。 scatter_kws={"alpha" : 0.0}

ソリューションは、マーカーの引数を指定して、代わりにscatter_kws引数を使用して、目に見えないマーカーを設定していないだろう。ここで

は完全な例である:

質問の編集した部分については
import matplotlib.pyplot as plt 
import seaborn as sns 
import pandas as pd 
import numpy as np 

## generate some data 
n=19; m=9 
y_data = [] 
for i in range(m): 
    a = (np.random.poisson(lam=0.99-float(i)/m,size=n)+i*.9+np.random.rand(1)*2) 
    a+=(np.random.rand(n)-0.5)*2 
    y_data.append(a*m) 
y_data = np.array(y_data).flatten() 
x_data = np.floor(np.sort(np.random.rand(n*m))*m) 
## put them into dataframe 
df = pd.DataFrame({"x":x_data,"y":y_data}) 

## plotting 
sns.regplot(y="y", x="x", data= df, color='k', scatter_kws={"alpha" : 0.0}) 
sns.swarmplot(x="x", y="y", data= df) 

plt.show() 

enter image description here


:swarmplotがカテゴリプロットしたものであるので
、プロットの軸は、まだから行きます - 0.5〜8.5であり、ラベルには10〜18が表示されません。 回避策としては、2軸と twinyを使用することが考えられます。

fig, ax = plt.subplots() 
ax2 = ax.twiny() 
sns.swarmplot(x="x", y="y", data= df, ax=ax) 
sns.regplot(y="y", x="x", data= df, color='k', scatter_kws={"alpha" : 0.0}, ax=ax2) 
ax2.grid(False) #remove grid as it overlays the other plot 
+0

これはviolinplotとregplotでは動作しますが、swarmplotとregplotでは動作しません。 – morepenguins

+0

私が言ったように、私はseaborn> 0.7.devでテストできませんでした。私の例では、violinplotの代わりにswarmplotを使用するとどうなりますか?質問と同じ問題? – ImportanceOfBeingErnest

+0

私はswarmplotを使用するソリューションを試しました。実際にはバイオリンプロットを使用する前と同じですので、実際には違いはありません。 – ImportanceOfBeingErnest

関連する問題