IT

python / matplotlib을 사용하여 3d 거기에 대한 "카메라 위치"를 설정하는 방법은 무엇입니까?

lottoking 2020. 7. 19. 09:07
반응형

python / matplotlib을 사용하여 3d 거기에 대한 "카메라 위치"를 설정하는 방법은 무엇입니까?


mplot3d는 멋진 3D 데이터를 사용하여 생성하는 방법을 배우고 지금까지 매우 기쁩니다. 내가 지금 시도하는 것은 회전하는 표면의 작은 애니메이션입니다. 이를 위해 3D 투영을위한 카메라 위치를 설정해야합니다. matplotlib을 대화 형으로 사용할 때 마우스를 사용하여 표면을 회전 할 수 있기 때문에 이것이 가능해야 생각합니다. 그러나 어디에서 어떻게 할 수 있습니까? mpl_toolkits.mplot3d.proj3d에서 많은 변환을 찾았지만 내 목적으로 사용하는 방법을 찾았지만 내가 원하는 일에 대한 예를 찾지 못했습니다.


"카메라 위치"는 3D 보는 데 사용하는 고도 및 방위각을 조정하려는 것처럼 들립니다. 로 접근 수 있습니다 . 아래 펼쳐서 사용하여 먼저 완성한 다음 높이 또는를 결정 합니다. 그런 다음 방위각 또는 조정하여 주위의 360도 전체를 변경하여 각 인스턴스에서 그림을 저장하고 배치 할 때 방위각을 기록합니다. 보다 복잡한 카메라 팬의 경우 원하는 효과를 위해 고도와 각도를 모두 있습니다.ax.view_initelevazim

    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)

쉽게 찾을 수있는 것입니다. 그래서 나는 음모를 꾸미고 마우스로 거리를 바꾸면서 음모를 움직입니다. 그런 다음 다른 것의 거리를 포함하여 뷰를 복제하십시오. axx.ax.get_axes ()는 오래된 .azim과 .elev를 얻은 것을 얻습니다.

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

나중에 3D 그래프 ...

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

편집 1 ... 좋아, 카메라 위치는 .dist 값에 대한 잘못된 생각입니다. 그것은 전체 그래프에 대해 설명 해커 스칼라 멀티 플라이어로 모든 것을 타고갑니다.

이보기의 확대 / 축소에 크기입니다.

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

나중에 그래프 ...

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])     #...

참고 URL : https://stackoverflow.com/questions/12904912/how-to-set-camera-position-for-3d-plots-using-python-matplotlib

반응형