plot_wireframe graficas example data python matplotlib mplot3d

graficas - python 3d



cómo establecer la "posición de la cámara" para gráficos en 3D usando python/matplotlib? (2)

Lo que sería útil sería aplicar la posición de la cámara a una nueva trama. Entonces trazo, luego muevo la trama con el mouse cambiando la distancia. Luego intente replicar la vista incluyendo la distancia en otra parcela. Encuentro que axx.ax.get_axes () me da un objeto con los antiguos .azim y .elev.

EN PYTHON ...

axx=ax1.get_axes() azm=axx.azim ele=axx.elev dst=axx.dist # ALWAYS GIVES 10 #dst=ax1.axes.dist # ALWAYS GIVES 10 #dst=ax1.dist # ALWAYS GIVES 10

Gráfico posterior en 3D ...

ax2.view_init(elev=ele, azim=azm) #Works! ax2.dist=dst # works but always 10 from axx

EDITAR 1 ... OK, la posición de la cámara es la forma incorrecta de pensar con respecto al valor .dist. Se monta encima de todo como una especie de multiplicador escalar hackey para todo el gráfico.

Esto funciona para la ampliación / zoom de la vista:

xlm=ax1.get_xlim3d() #These are two tupples ylm=ax1.get_ylim3d() #we use them in the next zlm=ax1.get_zlim3d() #graph to reproduce the magnification from mousing axx=ax1.get_axes() azm=axx.azim ele=axx.elev

Gráfico posterior ...

ax2.view_init(elev=ele, azim=azm) #Reproduce view ax2.set_xlim3d(xlm[0],xlm[1]) #Reproduce magnification ax2.set_ylim3d(ylm[0],ylm[1]) #... ax2.set_zlim3d(zlm[0],zlm[1]) #...

Estoy aprendiendo cómo usar mplot3d para producir buenos gráficos de datos en 3D y estoy muy feliz hasta ahora. Lo que estoy tratando de hacer en este momento es una pequeña animación de una superficie giratoria. Para ese propósito, necesito establecer una posición de cámara para la proyección 3D. Supongo que esto debe ser posible ya que se puede rotar una superficie con el mouse cuando se usa matplotlib de forma interactiva. Pero, ¿cómo puedo hacer esto desde un script? Encontré muchas transformaciones en mpl_toolkits.mplot3d.proj3d, pero no pude encontrar la manera de usarlas para mi propósito y no encontré ningún ejemplo de lo que estoy tratando de hacer.


Por "posición de la cámara", parece que quieres ajustar la elevación y el ángulo de acimut que utilizas para ver el trazado 3D. He utilizado la secuencia de comandos siguiente para crear primero la gráfica, luego determiné una buena elevación, o elev , desde la cual puedo ver mi trazado. A continuación, azim ángulo de acimut, o azim , para variar 360 grados completos alrededor de mi trazado, guardando la figura en cada instancia (y observando qué ángulo de acimut guardaba el gráfico). Para un panorama de cámara más complicado, puede ajustar tanto la elevación como el ángulo para lograr el efecto deseado.

from mpl_toolkits.mplot3d import Axes3D ax = Axes3D(fig) ax.scatter(xx,yy,zz, marker=''o'', s=20, c="goldenrod", alpha=0.6) for ii in xrange(0,360,1): ax.view_init(elev=10., azim=ii) savefig("movie%d.png" % ii)