2013-07-02 18 views
14

Qualcuno conosce un modo per portare un grafico a dispersione in primo piano in matplotlib? Devo visualizzare il disegno a dispersione sulla parte superiore del contorno, ma per impostazione predefinita è riportato sotto ...Matplotlib: traccia di dispersione in primo piano sopra un tracciato di contorno

Grazie in anticipo!

+4

Scopri i [ 'zorder'] (http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_zorder) parametro del metodo' scatter'. [Esempio di utilizzo] (http://matplotlib.org/examples/pylab_examples/zorder_demo.html) dal sito matplotlib. – hooy

+0

Questo ha funzionato, grazie! – Mike

risposta

23

È possibile scegliere manualmente in quale ordine i diversi grafici devono essere visualizzati con il parametro zorder di ad es. il metodo scatter.

Per dimostrare, vedere il codice di seguito, in cui il grafico a dispersione nella sottotramcia sinistra ha zorder=1 e nella sottotramcia destra ha zorder=-1. L'oggetto con il massimo zorder viene posizionato in alto. Ciò significa che la dispersione verrà posizionata nella parte superiore del contorno nella prima sottotrama, mentre verrà posizionata nella parte inferiore della seconda sottotrama.

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