web-dev-qa-db-fra.com

Matplotlib: Diagramme de dispersion au premier plan au-dessus d'un tracé de contour

Quelqu'un sait-il comment mettre un nuage de points au premier plan dans matplotlib? Je dois afficher le nuage de points au-dessus du contour, mais par défaut, il est tracé en dessous ...

Merci d'avance!

30
Mike

Vous pouvez choisir manuellement dans quel ordre les différents tracés doivent être affichés avec le paramètre zorder de par ex. la méthode scatter.

Pour le démontrer, consultez le code ci-dessous, où le nuage de points dans le sous-tracé de gauche a zorder=1 et dans la sous-intrigue de droite, il a zorder=-1. L'objet avec le plus haut zorder est placé en haut. Cela signifie que la diffusion sera placée au-dessus du contour dans le premier sous-tracé, tandis qu'elle est placée en dessous dans le deuxième sous-tracé.

import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)

norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max())
cmap = cm.PRGn

levels = np.arange(-2.0, 1.601, 0.4)

fig, axes = plt.subplots(1,2, sharey=True)

for ax, zord in Zip(axes, [1, -1]):
    ax.contourf(X, Y, Z, levels,
                cmap=cm.get_cmap(cmap, len(levels)-1),
                norm=norm)
    ax.autoscale(False) # To avoid that the scatter changes limits
    ax.scatter(np.random.uniform(-3,3,10),
               np.random.uniform(-2,2,10),
               zorder=zord)
    ax.set_title('Scatter with zorder={0}'.format(zord))

enter image description here

36
sodd