Estoy tratando de hacer una trama 3D en matplotlib con tres círculos, cada uno centrado en el origen y con un radio de 1, apuntando en diferentes direcciones, para ilustrar una esfera de radio 1, por ejemplo.Cómo trazar una colección de parches 3D en matplotlib?
En 2D haré una colección de parches circulares y la añadiré a los ejes. En 3D tengo problemas para mostrar los parches, y mucho menos para orientarlos en diferentes direcciones.
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()
La ejecución de este programa se llena toda la pantalla de diagramas con el azul, es decir, el color de la cara de los parches, no importa cómo puedo rotar la trama. Si configuro facecolor='none'
en la llamada PatchCollection()
, aparece un Axes3D
vacío.
cosas que he intentado:
- Si uso un
CircleCollection
en lugar de unPatchCollection
, no hay parches aparecen en absoluto. El parámetro
zs
en la llamadapatch_collection_2d_to_3d()
es impar; Yo esperaría que poner ya seazs=0
(una coordenada z para los tres parches) ozs=[0,0,0]
(una por separado coordenada z para cada parche), pero ambos de los que tirar un error:ValueError: setting an array element with a sequence.
para orientar el parches de manera diferente, esperaría poder pasar algo como
zdir=['x', 'y', 'z']
pero los resultados no son diferentes si paso eso o'z'
o .- También me hubiera esperado a ser capaz de hacer
ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z'])
en lugar de convertir la colección de parches de 2D a 3D, pero que arroja un error demasiado:AttributeError: 'Patch3DCollection' object has no attribute 'set_sort_zpos'
@ respuesta de Lilith es un enfoque alternativo excelente; ¿Alguien puede aclararme por qué mi enfoque no funcionó? – ptomato