Erste Schlussfolgerung: Ich habe es aufgegeben, die Sprühdaten in Liste und Scatter () einzeln zu übergeben, um das Problem zu lösen.
Bei Verwendung der Streuzeichnungsmethode streuung () Normalerweise möchte ich die Markerposition und den Farbcodierungswert in einer Liste übergeben.
Liste xs,ys,zs,Beim Passieren vs.
ax.scatter(xs, ys, zs, c=vs, norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )
Aus irgendeinem Grund wurde die Löschung der verborgenen Oberfläche jedoch verrückt, sobald ich das Farbschema mit c = vs bestanden hatte. Es kommt vor, dass der vorderste Marker hinter dem innersten Marker versteckt ist und nicht gesehen werden kann. (Vielleicht hängt es von der Version ab.)
Aktion: Als Ergebnis von allem, was mir einfällt Es war normal, wenn ich "zerstreue () jeweils einen Marker in der for-Anweisung" setze.
Streuung für jeden()
ax = fig.add_subplot( 122, projection='3d')
for x,y,z,v in zip(xs,ys,zs,vs):
ax.scatter(x, y, z, c=(v,),norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )
Das Folgende ist ein Beispiel:
Vergleich löschen
def plot():
def randrange(n, vmin, vmax):
return (vmax - vmin)*np.random.rand(n) + vmin
n = 20
xs = randrange(n, 0, 100)
ys = randrange(n, 0, 100)
zs = randrange(n, 0, 100)
vs = xs
norm = Normalize(vmin=min(vs), vmax=max(vs) )
fig = plt.figure()
ax = fig.add_subplot(121, projection='3d')
ax.scatter(xs, ys, zs, c=vs, norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax = fig.add_subplot( 122, projection='3d')
for x,y,z,v in zip(xs,ys,zs,vs):
ax.scatter(x, y, z, c=(v,),norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Python3.8-Ausführungsergebnis ↓
↑ Wenn die linke Figur als Liste übergeben wird und die rechte Figur einzeln übergeben wird. (Ich wollte in eine Richtung zeichnen, die leicht zu unterscheiden ist)
Die Abbildung rechts ist normal.
wichtiger Punkt:
Das Verhalten von Scatter () und Scatter3d () ist wahrscheinlich dasselbe.
Wir haben die offizielle Dokumentation von Matoplotlib nicht bestätigt. Erstens kann die Verwendung der Prämisse falsch sein. Ich weiß es nicht.