简体   繁体   English

用Python绘制二维核密度估计

[英]Plotting 2D Kernel Density Estimation with Python

I would like to plot a 2D kernel density estimation. 我想绘制2D核密度估计。 I find the seaborn package very useful here. 我发现seaborn包在这里非常有用。 However, after searching for a long time, I couldn't figure out how to make the y-axis and x-axis non-transparent. 但是,经过长时间的搜索,我无法弄清楚如何使y轴和x轴不透明。 Also, how to show the values of the density on the contour? 另外,如何在轮廓上显示密度值? I would be very appreciated if someone could help me out. 如果有人可以帮助我,我将非常感激。 Below please see my code and graph. 下面请看我的代码和图表。 在此输入图像描述

import numpy as np
import seaborn as sns
import matplotlib.pyplot as pl

Y = np.random.multivariate_normal((0, 0), [[0.8, 0.05], [0.05, 0.7]], 100)
ax = sns.kdeplot(Y, shade = True, cmap = "PuBu")
ax.patch.set_facecolor('white')
ax.collections[0].set_alpha(0)
ax.set_xlabel('$Y_1$', fontsize = 15)
ax.set_ylabel('$Y_0$', fontsize = 15)
pl.xlim(-3, 3)
pl.ylim(-3, 3)
pl.plot([-3, 3], [-3, 3], color = "black", linewidth = 1)
pl.show()

Here is a solution using scipy and matplotlib only : 这是一个仅使用scipymatplotlib的解决方案:

import numpy as np
import matplotlib.pyplot as pl
import scipy.stats as st

data = np.random.multivariate_normal((0, 0), [[0.8, 0.05], [0.05, 0.7]], 100)
x = data[:, 0]
y = data[:, 1]
xmin, xmax = -3, 3
ymin, ymax = -3, 3

# Peform the kernel density estimate
xx, yy = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([xx.ravel(), yy.ravel()])
values = np.vstack([x, y])
kernel = st.gaussian_kde(values)
f = np.reshape(kernel(positions).T, xx.shape)

fig = pl.figure()
ax = fig.gca()
ax.set_xlim(xmin, xmax)
ax.set_ylim(ymin, ymax)
# Contourf plot
cfset = ax.contourf(xx, yy, f, cmap='Blues')
## Or kernel density estimate plot instead of the contourf plot
#ax.imshow(np.rot90(f), cmap='Blues', extent=[xmin, xmax, ymin, ymax])
# Contour plot
cset = ax.contour(xx, yy, f, colors='k')
# Label plot
ax.clabel(cset, inline=1, fontsize=10)
ax.set_xlabel('Y1')
ax.set_ylabel('Y0')

pl.show()

The previous code gives the following result : 前面的代码给出了以下结果:

plot_kernel_density.jpg

which has a non-transparent x-axis, a non-transparent y-axis and values of the density on the contour. 它具有不透明的x轴,不透明的y轴和轮廓上的密度值。 Is this the expected result ? 这是预期的结果吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM