2017-06-09 4 views
0

Ich versuche, ein 3D-Oberflächendiagramm zu erstellen, aber das Ergebnis ist nicht auf den Ursprung ausgerichtet: enter image description hereMatplotlib Zentrum plot_surface auf Achsbereich

Sie einfach auf der Z-Projektion sehen, dass es auf die ein wenig aus ist X und Y-Achsen. Meine Daten ist eine Matrix, wo die ersten beiden Spalten meine X und Y des und die dritte Spalte ist mein Z. sind Dies ist, wie ich die Werte berechnen:

bins = np.linspace(0, 1, 1000) 
indices = np.digitize(data[:, :2], bins, right=True) 
X, Y = np.meshgrid(bins, bins, indexing='ij') 
Q = np.zeros_like(X) 
C = np.zeros_like(X) 
d = data[:, 2] 
for idx in range(0, len(indices)): 
    (i,j) = indices[idx] 
    Q[i, j] += d[idx] 
    C[i, j] += 1 
C[C == 0] = 1 # avoid division by zero errors 
Q /= C 
return (X, Y, Q, C) 

Plotten Code:

fig = plt.figure(figsize=(30, 15)) 
ax = fig.add_subplot(121, projection='3d') 
ax.set_xlim3d(-0.5, 1) 
ax.set_ylim3d(0, 1.5) 
ax.set_zlim3d(-1.5, 1) 
Q = ndi.gaussian_filter(Q, sigma=10) 
ax.plot_surface(X, Y, Q, cmap=cm.coolwarm, lw=lw, rstride=rs, cstride=cs, alpha=a, antialiased=True) 
ax.contourf(X, Y, Q, zdir='z', offset=-1.5, cmap=cm.coolwarm) 
ax.contourf(X, Y, Q, zdir='x', offset=-0.5, cmap=cm.coolwarm) 
ax.contourf(X, Y, Q, zdir='y', offset=+1.5, cmap=cm.coolwarm) 

Meine Frage I bin fehlt eine Berechnung der Oberfläche, um sicherzustellen, auf den Ursprung ausgerichtet ist? Vielen Dank.

Antwort

1

Die Oberfläche wird auf den Ursprung ausgerichtet. Aber der Ursprung „in der Luft hängen“. Oder mit anderen Worten, die untere Scheibe ist leicht (~ 0,05 Einheiten) unter der contourf Handlung, die es erscheinen läßt als ob die Handlung falsch ausgerichtet war.

Sie können sich diese Frage ansehen: Removing axes margins in 3D plot Verwenden Sie eine der beiden Antworten, um die Fenster korrekt auszurichten.