Matplotlib: diagramme de dispersion à l'avant-plan sur un Tracé de Contour

est-ce que quelqu'un sait comment amener un scatter plot au premier plan à matplotlib? Je dois afficher le pointage de dispersion sur le dessus du contour, mais par défaut il est pointé en dessous...

Merci d'avance!

20
demandé sur Rhubarb 2013-07-02 20:56:33

1 réponses

vous pouvez choisir manuellement dans quel ordre les différentes parcelles doivent être affichées avec le zorder paramètre de l'exemple scatter méthode.

pour démontrer, voir le code ci-dessous, où le nuage de points dans le sous-lot de gauche a zorder=1 et dans le droit intrigue secondaire, il a zorder=-1. L'objet avec le plus haut zorder est placé sur le dessus. Cela signifie que l'éparpillement sera placé sur le dessus du contour dans le premier sous-lot, alors qu'il est placé en dessous dans le deuxième intrigue secondaire.

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

29
répondu hooy 2013-07-02 18:01:59