Python 过地块seaborn regplot和Swarmlot

Python 过地块seaborn regplot和Swarmlot,python,matplotlib,seaborn,swarmplot,Python,Matplotlib,Seaborn,Swarmplot,我想在seaborn中过多地绘制Swarmlot和regplot,这样我就可以有一条y=x线穿过我的Swarmlot 这是我的密码: 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) 我在绘图时没有得到任何错误,但regplot从未显示在绘图上。我怎样才能解决这个问题

我想在seaborn中过多地绘制Swarmlot和regplot,这样我就可以有一条y=x线穿过我的Swarmlot

这是我的密码:

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)
我在绘图时没有得到任何错误,但regplot从未显示在绘图上。我怎样才能解决这个问题

编辑:我的regplot和swarmlot不会过度绘制,而是在同一帧中绘制,但由一些未指定的y量分隔。如果我翻转它们,使regplot高于对swarmlot的调用,则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)


第二次编辑:下面的双轴解决方案效果很好

原则上,模拟绘制Swarmlot和regplot的方法效果良好

这里的问题是您设置了一个空标记(
marker=”“
)。这会破坏regplot,因此不会显示它。显然,这只是在同一个图形中绘制多个对象时的问题;使用空标记绘制单个regplot效果良好

解决方案不是指定marker参数,而是通过使用
scatter\u kws
参数设置不可见的标记:
scatter\u 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()


关于问题的编辑部分:
由于Swarmlot是一个分类图,因此图中的轴仍在-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

Swarmlot中的x轴是分类的,而不是定量的。你为什么要这么做?我想展示Swarmlot的趋势。这并不能回答问题。您需要更仔细地考虑您正在尝试做什么。这适用于violinplot和regplot,但不适用于Swarmlot和regplot。正如我所说,我无法使用seaborn>0.7.dev进行测试。在我的示例中,使用Swarmlot而不是violinplot时会发生什么?与问题中的问题相同?我现在修补了一个使用Swarmlot的解决方案。它实际上和以前使用小提琴情节一样,所以真的没有区别。太棒了!非常感谢。这不是我投的反对票,但我投了赞成票,取消了投票。当我试着这样做的时候,我遇到了一个问题。我准确地复制了您的代码,但用实际数据替换了x_数据和y_数据。我将我的问题添加为上面的编辑。