J'essaie de créer un tracé 3D en matplotlib avec trois cercles centrés à l'origine et avec un rayon de 1, pointant dans des directions différentes - pour illustrer une sphère de rayon 1, par exemple.Comment tracer une collection de patch 3D dans matplotlib?
En 2D, je voudrais créer une collection de patchs en cercle et l'ajouter aux axes. En 3D, j'ai du mal à faire apparaître les patchs, et encore moins à les orienter dans des directions différentes.
import matplotlib
import matplotlib.pyplot as P
import mpl_toolkits.mplot3d as M3
fig = P.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
circles = matplotlib.collections.PatchCollection(
[matplotlib.patches.Circle((0, 0), 1) for count in range(3)],
offsets=(0, 0))
M3.art3d.patch_collection_2d_to_3d(circles, zs=[0], zdir='z')
ax.add_collection(circles)
P.show()
L'exécution de ce programme remplit toute la fenêtre de la parcelle avec le bleu, à savoir la couleur du visage des taches, peu importe comment je fais tourner l'intrigue. Si je mets facecolor='none'
dans l'appel PatchCollection()
, alors un Axes3D
apparaît.
choses que j'ai essayé:
- Si j'utilise un
CircleCollection
au lieu d'unPatchCollection
, aucun patch apparaissent du tout. Le paramètre
zs
dans l'appelpatch_collection_2d_to_3d()
est impair; Je me attends à mettre soitzs=0
(une coordonnée z pour les trois patches) ouzs=[0,0,0]
(un z coordonnée pour chaque patch), mais les deux de ceux qui jettent une erreur:ValueError: setting an array element with a sequence.
Pour orienter la correctifs différemment, je m'attendrais à être capable de passer quelque chose comme
zdir=['x', 'y', 'z']
mais les résultats ne sont pas différents si je passe cela ou'z'
ou['z']
.- Je voudrais également attendu à pouvoir faire
ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z'])
au lieu de convertir la collection de patch de 2d à 3d, mais qui jette une erreur aussi:AttributeError: 'Patch3DCollection' object has no attribute 'set_sort_zpos'
@ La réponse de Lilith est une excellente approche alternative; Quelqu'un peut-il m'éclairer pour savoir pourquoi mon approche n'a pas fonctionné? – ptomato