Première conclusion: j'ai renoncé à passer les données de pulvérisation dans list et scatter () une par une pour résoudre le problème.
Lors de l'utilisation de la méthode de dessin en nuage scatter () Je souhaite généralement transmettre la position du marqueur et la valeur de codage couleur dans une liste.
Liste xs,ys,zs,En passant vs
ax.scatter(xs, ys, zs, c=vs, norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )
Cependant, pour une raison quelconque, dès que j'ai passé le schéma de couleurs avec c = vs, l'effacement de la surface cachée est devenu fou. Il arrive que le marqueur le plus en avant soit caché derrière le marqueur le plus à l'intérieur et ne puisse pas être vu. (Cela dépend peut-être de la version.)
Action: Après avoir essayé tout ce à quoi je peux penser C'était normal quand je définissais "scatter () un marqueur à la fois dans l'instruction for".
Scatter pour chacun()
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 )
Ce qui suit est un exemple:
Effacement de la comparaison
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()
Résultat de l'exécution Python3.8 ↓
↑ Lorsque le chiffre de gauche est passé sous forme de liste et que le chiffre de droite est passé un par un. (J'avais l'intention de dessiner dans une direction facile à distinguer)
La figure de droite est normale.
point important:
Le comportement de scatter () et scatter3d () est probablement le même.
Nous n'avons pas confirmé la documentation officielle de matoplotlib. En premier lieu, l'utilisation de la prémisse peut être incorrecte. Je ne sais pas.
Recommended Posts