2015-05-09 122 views
11

我想繪製2D核心密度估計。我發現seaborn軟件包在這裏非常有用。但是,經過長時間的搜索,我無法弄清楚如何使y軸和x軸不透明。另外,如何顯示輪廓上的密度值?如果有人能幫助我,我會非常感激。下面請看我的代碼和圖表。 enter image description here使用Python繪製2D核密度估計

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() 
+1

我不確定你的意思是「使y軸和x軸不透明」; 'ax.collections [0] .set_alpha(0)'這一行使最低輪廓透明;如果你不想這樣做,不要包含該行。 – mwaskom

回答

29

下面是一個溶液中使用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() 

前面的代碼給出以下結果:

plot_kernel_density.jpg

其具有非透明x軸,非 - 透明y軸和輪廓上的密度值。這是預期的結果嗎?

+0

這非常有用!感謝您的詳細演示。我會用你在這裏做的。 – user3698176

相關問題