2013-07-02 20 views
14

Kennt jemand eine Möglichkeit, ein Streudiagramm in Matplotlib in den Vordergrund zu bringen? Ich muss den Streuplotting oben auf der Kontur anzeigen, aber standardmäßig ist es darunter dargestellt ...Matplotlib: Streudiagramm in den Vordergrund auf einem Konturplot

Vielen Dank im Voraus!

+4

Überprüfen Sie die [ 'zorder'] (http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_zorder) Parameter des' scatter' Verfahrens. [Beispielverwendung] (http://matplotlib.org/examples/pylab_examples/zorder_demo.html) von der matplotlib-Site. – hooy

+0

Das hat es geschafft, danke! – Mike

Antwort

23

Sie können manuell auswählen, in welcher Reihenfolge die verschiedenen Plots mit dem Parameter zorder von z. die scatter Methode.

Um zu demonstrieren, siehe den Code unten, wo das Streudiagramm im linken Teilplot zorder=1 und im rechten Teilplot zorder=-1 hat. Das Objekt mit der höchsten zorder wird oben platziert. Dies bedeutet, dass die Streuung im ersten Teilplot oben auf der Kontur platziert wird, während sie im zweiten Teilplot unterhalb platziert wird.

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

Verwandte Themen