我想在海运中过度绘制成组图和重新绘制图,这样我就可以有一个y=x行通过我的群图。
这是我的代码:
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)
我在绘图时不会出现任何错误,但是重新绘图不会显示在这个情节上。我怎么才能解决这个问题?
编辑:我的回归图和群图没有过度绘制,相反,在同一帧中绘制,但用一些未指定的y值分隔。如果我把它们翻过来,这样正则图就不会被调用成show了,正则图根本就不会出现。
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)
第二个编辑:双轴解决方案从下到下工作漂亮!
发布于 2017-01-22 03:03:07
原则上,绘制成群图和回归图的方法工作得很好。
这里的问题是您设置了一个空标记(marker = " "
)。这破坏了正则图,因此它没有显示。显然,这只是在将多个东西绘制到同一个图时才会出现的问题;用空标记绘制一个正则图很好。
解决方案不是指定标记参数,而是使用scatter_kws
参数:scatter_kws={"alpha" : 0.0}
设置不可见的标记。
下面是一个完整的例子:
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()
关于问题经编辑的部分:
因为成组图是一个绝对的图,所以图中的轴仍然是从-0.5到8.5,而不是像标签显示的那样从10到18。一种可能的解决方法是使用两个轴和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
https://stackoverflow.com/questions/41787143
复制