web-dev-qa-db-fra.com

Tracer une estimation de densité de noyau 2D avec Python

Je voudrais tracer une estimation de densité de noyau 2D. Je trouve le paquet seaborn très utile ici. Cependant, après une longue recherche, je n'ai pas pu comprendre comment rendre l'axe des y et l'axe des x non transparent. Aussi, comment afficher les valeurs de la densité sur le contour? Je serais très apprécié si quelqu'un pouvait m'aider. Veuillez voir ci-dessous mon code et mon graphique. enter image description here

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()
19
user3698176

Voici une solution utilisant uniquement scipy et matplotlib:

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

Le code précédent donne le résultat suivant:

plot_kernel_density.jpg

qui a un axe x non transparent, un axe y non transparent et des valeurs de densité sur le contour. Est-ce le résultat attendu?

40
Flabetvibes

Avez-vous vérifié ces exemples?

http://matplotlib.org/examples/pylab_examples/contour_demo.html

One example of contour_demoand another one (other options)

http://matplotlib.org/examples/pylab_examples/contourf_demo.html

One example of contourf_demoand 4 plots stacked

Faites défiler vers le bas pour voir plus d'images.

1
jcoppens