gpt4 book ai didi

python - 覆盖seaborn regplot 和 swarmplot

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:34 25 4
gpt4 key购买 nike

我想在seaborn中过度绘制一个群图和regplot,这样我就可以在我的群图中有一条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)

绘图时我没有收到任何错误,但 regplot 从未显示在绘图上。我该如何解决这个问题?

plot

编辑:我的 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

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

最佳答案

原则上,同时绘制群图和规则图的方法效果很好。

这里的问题是您设置了一个空标记 (marker = "")。这会破坏regplot,使其不会显示。显然,这只是将多个事物绘制到同一个图表时的问题;用空标记绘制单个regplot效果很好。

解决方案是不指定标记参数,而是使用 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()

enter image description here

<小时/>关于问题的编辑部分:
由于 swarmplot 是一个分类图,因此图中的轴仍然从 -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

关于python - 覆盖seaborn regplot 和 swarmplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41787143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com