Pandas 如何在seaborn散点图中绘制核密度估计

Pandas 如何在seaborn散点图中绘制核密度估计,pandas,matplotlib,seaborn,kernel-density,Pandas,Matplotlib,Seaborn,Kernel Density,我想绘制与图中所示相同的图(但仅绘制红色部分)。该曲线是仅基于X值的核密度估计(y值不相关,实际上都是1,2或3。这里只是这样绘制以区分红色和蓝色。我已经绘制了散点图,但如何在散点图上包含核密度曲线?(曲线中的黑色虚线仅为四分位数和中间值) 如果使用子地块,会更容易。下面是seaborn的泰坦尼克号数据集的一个示例: 将熊猫作为pd导入 将matplotlib.pyplot作为plt导入 导入seaborn作为sns sns.set() 泰坦尼克号=sns.load\u数据集(“泰坦尼克号”)

我想绘制与图中所示相同的图(但仅绘制红色部分)。该曲线是仅基于X值的核密度估计(y值不相关,实际上都是1,2或3。这里只是这样绘制以区分红色和蓝色。我已经绘制了散点图,但如何在散点图上包含核密度曲线?(曲线中的黑色虚线仅为四分位数和中间值)


如果使用子地块,会更容易。下面是seaborn的泰坦尼克号数据集的一个示例:

将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
sns.set()
泰坦尼克号=sns.load\u数据集(“泰坦尼克号”)
图,ax=plt.子批次(nrows=3,sharex=True)
ax[2]。集xlabel('Age'))
因为我在[1,2,3]中:
年龄i=泰坦尼克号[泰坦尼克号['pclass']==i]['age']
ax[i-1]。散射(年龄i[0]*len(年龄i))
sns.kdeplot(年龄i,ax=ax[i-1],阴影=True,图例=False)
ax[i-1]。设置检查([])
ax[i-1]。集_ylim(-0.01)
ax[i-1]。集合标签('Class'+str(i))

如果使用子地块,会更容易。下面是seaborn的泰坦尼克号数据集的一个示例:

将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
sns.set()
泰坦尼克号=sns.load\u数据集(“泰坦尼克号”)
图,ax=plt.子批次(nrows=3,sharex=True)
ax[2]。集xlabel('Age'))
因为我在[1,2,3]中:
年龄i=泰坦尼克号[泰坦尼克号['pclass']==i]['age']
ax[i-1]。散射(年龄i[0]*len(年龄i))
sns.kdeplot(年龄i,ax=ax[i-1],阴影=True,图例=False)
ax[i-1]。设置检查([])
ax[i-1]。集_ylim(-0.01)
ax[i-1]。集合标签('Class'+str(i))

看看seaborn's看看seaborn's
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.ticker import MaxNLocator
import matplotlib.pyplot as plt
from scipy.stats import norm
from sklearn.neighbors import KernelDensity
%matplotlib inline
# Change plotting style to ggplot
plt.style.use('ggplot')
from matplotlib.font_manager import FontProperties



X_plot = np.linspace(0, 30, 1000)[:, np.newaxis]

X1 = df[df['Zustandsklasse']==1]['Verweildauer'].values.reshape(-1,1)
X2 = df[df['Zustandsklasse']==2]['Verweildauer'].values.reshape(-1,1)
X3 = df[df['Zustandsklasse']==3]['Verweildauer'].values.reshape(-1,1)
#print(X1)



ax=sns.scatterplot(x="Verweildauer", y="CS_bandwith", data=df, legend="full", alpha=1)


kde=KernelDensity(kernel='gaussian').fit(X1)
log_dens = kde.score_samples(X_plot)
ax.plot(X_plot[:,0], np.exp(log_dens), color ="blue", linestyle="-", label="Gaussian Kernel")


ax.yaxis.set_major_locator(MaxNLocator(integer=True))
ax.invert_yaxis()
plt.ylim(5.5, .5)
ax.set_ylabel("Zustandsklasse")
ax.set_xlabel("Verweildauer in Jahren")


handles, labels = ax.get_legend_handles_labels()
# create the legend again skipping this first entry
leg = ax.legend(handles[1:], labels[1:], loc="lower right", ncol=2, facecolor='silver', fontsize= 7)

ax.set_xticks(np.arange(0, 30, 5))
ax2 = ax.twinx()
#get the ticks at the same heights as the left axis
ax2.set_ylim(ax.get_ylim())


s=[(df["Zustandsklasse"] == t).sum() for t in range(1, 6)]
s.insert(0, 0)

print(s)
ax2.set_yticklabels(s)
ax2.set_ylim(ax.get_ylim())
ax2.set_ylabel("Anzahl Beobachtungen")
ax2.grid(False)

#plt.tight_layout()
plt.show()