2 votes

comment faire un nuage de points avec effet de halo en utilisant Matplotlib ?

Je veux tracer un espace latent de variables aléatoires gaussiennes. où x_i~Gaussian(u_i, simga_i) Je veux représenter l'incertitude dans le graphique comme cette image plot made by someone Mais je ne trouve pas d'API permettant de faire cela avec Matplotlib !

0voto

MPA Points 905

Vous pourriez peut-être essayer quelque chose comme l'exemple ci-dessous ? (modifié à partir de aquí )

import numpy as np
import matplotlib.pyplot as plt

def normal_pdf(x, mean, var):
    return np.exp(-(x - mean)**2 / (2*var))

xmin, xmax, ymin, ymax = (0, 100, 0, 100)

N = 1000
xx = np.linspace(xmin, xmax, N)
yy = np.linspace(ymin, ymax, N)

x = normal_pdf(xx, 50, 75)
y = normal_pdf(yy, 50, 75)

weights = np.array(np.meshgrid(x, y)).prod(0)

plt.imshow(weights, extent=(xmin, xmax, ymin, ymax), cmap=plt.cm.Blues, alpha=0.5)
plt.plot(50, 50, "bo")
plt.tight_layout()
plt.show()

Résultat :

enter image description here

0voto

Francesco Points 65

Pour ajouter d'autres points :

import numpy as np
import matplotlib.pyplot as plt

def normal_pdf(x, mean, var):
    return np.exp(-(x - mean)**2 / (2*var))

def add_point(mu, std, ax):
    x = normal_pdf(xx, mu, std)
    y = normal_pdf(yy, xmax-mu, std)
    weights = np.array(np.meshgrid(x, y)).prod(0)
    ax.imshow(weights, extent=(xmin, xmax, ymin, ymax), cmap=plt.cm.Blues, alpha=0.5)
    plt.plot(mu, mu, "bo")

xmin, xmax, ymin, ymax = (0, 150, 0, 150)

N = 1000
xx = np.linspace(xmin, xmax, N)
yy = np.linspace(ymin, ymax, N)

fig, _ax = plt.subplots()

add_point(50, 75, _ax)
add_point(10, 25, _ax)

plt.tight_layout()
plt.show()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X