python mayavi 3 차원 그림 구현 에 대한 상세 한 설명

8657 단어 pythonmayavi
인터넷 에서 mayavi 의 공식 도움말 문 서 를 다운로드 하 는데 그 안에 많은 예 가 있 습 니 다.아래 의 기록 은 모두 매 뉴 얼 을 보고 얻 은 것 입 니 다.
http://code.enthought.com/projects/mayavi/docs/development/latex/mayavi/mayavi_user_guide.pdf
python 의 mayavi.mlab 라 이브 러 리 에 있 는 그림 함수 에는 후보 인자 가 많 지만 다음 기록 은 그다지 토론 되 지 않 았 습 니 다.본인 도 사용 해 야 매 뉴 얼 을 볼 수 있 습 니 다.
mayavi 2 의 그림 환경 을 설치 한 후 numpy 와 결합 하여 과학적 으로 그림 을 그 릴 수 있 습 니 다.코드 에 다음 과 같은 코드 를 미리 추가 할 수 있 습 니 다.

  import mayavi.mlab as mlab
  from numpy import exp,sin,cos,tan,random,mgrid,ogrid,linspace,sqrt,pi
  import numpy as np
  import matplotlib.pyplot as plt
  mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1)) #     
  #  matlab peaks  
  def peaks(x,y):
    return 3.0*(1.0-x)**2*exp(-(x**2) - (y+1.0)**2) - 10*(x/5.0 - x**3 - y**5) * exp(-x**2-y**2) - 1.0/3.0*exp(-(x+1.0)**2 - y**2)

먼저 도움말 매 뉴 얼 에서 mayavi 의 colormap 를 알 아 보 세 요.다음 그림:
python mayavi三维绘图
다음은 자주 사용 하 는 3 차원 그래 픽 함수 와 간단 한 예 를 열거 합 니 다.
1.barchart
* barchart(s, ...)
* barchart(x, y, s, ...)
* barchart(x, y, f, ...)
* barchart(x, y, z, s, ...)
* barchart(x, y, z, f, ...)
하나의 매개 변수 만 전달 하면 1 차원(1-D),2 차원(2-D)또는 3 차원(3-D)의 방향 성 길 이 를 주 는 배열 일 수 있 습 니 다.
만약 에 세 개의 매개 변수(x,y,s)또는(x,y,f),x,y 를 전달 하면 배열 s 에 대응 하 는 2 차원(2-D)좌표 이 고 호출 가능 한 함수 f 일 수도 있 습 니 다.이 함 수 는 배열 로 돌아 갑 니 다.
네 개의 매개 변 수 를 표시 할 때(x,y,z)는 3 차원 좌 표를 나타 낸다.

  s = np.random.rand(3,3)
  mlab.barchart(s)
  mlab.vectorbar()
  mlab.show()
python mayavi三维绘图

 x,y = np.mgrid[-5:5:20j,-5:5:20j]
  s = peaks(x,y)   #peaks        
  mlab.barchart(x,y,s)
  mlab.vectorbar()
  mlab.show()
python mayavi三维绘图
2.contour3d
* contour3d(scalars, ...)
* contour3d(x, y, z, scalars, ...)
* contour3d(x, y, z, f, ...)
scalars 는 3 차원 배열(3-D),x,y,z 는 numpy.mgrid 로 생 성 되 며 3 차원 배열 입 니 다.

  x, y, z = ogrid[-5:5:64j, -5:5:64j, -5:5:64j]
  scalars = x * x * 0.5 + y * y + z * z * 2.0
  mlab.contour3d(scalars, contours=6, transparent=True)
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
3.contoursurf
* contour_surf(s, ...)
* contour_surf(x, y, s, ...)
* contour_surf(x, y, f, ...)
s 는 2 차원 배열 이 고 f 는 호출 가능 한 함수 입 니 다.예 를 들 어 peaks 함수 입 니 다.
x and y can be 1D or 2D arrays (such as returned by numpy.ogrid or numpy.mgrid)

  x,y = np.mgrid[-5:5:70j,-5:5:70j]
  #  peaks      
  mlab.contour_surf(x,y,peaks,contours=9)
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
imshow
* imshow(s, ...)

s is a 2 dimension array. The values of s are mapped to a color using the colormap.

  s = np.random.rand(3,3) #     3×3  
  mlab.imshow(s)
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
5.mesh
* mesh(x, y, z, ...)
x, y, z are 2D arrays, all of the same shape, giving the positions of the vertices of the surface.
x,y,z 는 모두 2 차원 배열 로 같은 shape 를 가지 고 있 으 며 z 는 평면 좌표(x,y)에 대응 하 는 값 을 대표 합 니 다.아래 에 matlab 의 peaks 함수 3 차원 그림 을 그 렸 습 니 다.그림 비율 때문에 matlab 에서 예 쁘 게 그 려 지지 않 았 을 수도 있 습 니 다.

  y,x = np.mgrid[-5:5:70j,-5:5:70j]
  z=peaks(x,y)
  mlab.mesh(x,y,z)
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
서핑
* surf(s, ...)
* surf(x, y, s, ...)
* surf(x, y, f, ...)
x,y 는 1-D 또는 2-D 의 배열 일 수 있 습 니 다.(예 를 들 어 numpy.ogrid 또는 numpy.mgrid 가 돌아 오 는 배열)
매개 변수 배열 s 만 전달 하면 x,y 는 배열 s 의 색인 값 으로 여 겨 지고 같은 폭 의 데이터 세트 를 만 듭 니 다.(If only 1 array s is passed, the x and y arrays are assumed to be made from the indices of arrays, and an uniformly-spaced data set is created.)
surf 와 mesh 의 차이 점 은 surf 의 매개 변수 x,y 는 1 차원(1-D)일 수 있다 는 것 이다.

  mlab.clf()
  x, y = mgrid[-10:10:100j, -10:10:100j]
  r = sqrt(x**2 + y**2)
  z = sin(r)/r
  # mlab.surf(x,y,z,wrap_scale='auto')
  mlab.surf(z, warp_scale='auto')
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
surf 함수 역시 peaks 곡면 을 그 릴 수 있 습 니 다.

  pk_y,pk_x = np.mgrid[-5:5:70j,-5:5:70j]
  pk_z=peaks(pk_x,pk_y)
  mlab.surf(pk_z,warp_scale='auto',colormap='jet')
  mlab.colorbar()
  mlab.show()
여기 매개 변수 pk 하나만 전 달 했 습 니 다.z,
python mayavi三维绘图
7.plot3d
* plot3d(x, y, z, ...)
* plot3d(x, y, z, s, ...)
데이터 점 사이 에 선분 을 그립 니 다.x,y,z,s 는 모두 같은 shape 를 가 진 numpy 배열 이나 목록(list),x,y,z 는 3 차원 좌표,즉 공간 에서 데이터 점 의 위치 입 니 다.

  t=mgrid[-pi:pi:100j]
  mlab.plot3d(cos(t),sin(3*t),cos(5*t),color=(0.23,0.6,1),colormap='Spectral')
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
8.points3d
* points3d(x, y, z...)
* points3d(x, y, z, s, ...)
* points3d(x, y, z, f, ...)
앞의 plot3d 와 차이 가 많 지 않 습 니 다.다만 points3d 는 3 차원 좌표 아래 의 점(x,y,z)만 그립 니 다.여전히 앞의 예 를 사용 합 니 다.

  t=mgrid[-pi:pi:50j]
  s=sin(t)
  #   s         (scalar),mode  
  mlab.points3d(cos(t),sin(3*t),cos(5*t),s,mode='sphere',line_width=1)
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
매개 변수의 mode 는 다음 그림 을 선택 할 수 있 습 니 다.
python mayavi三维绘图
9.quiver3d
* quiver3d(u, v, w, ...)
* quiver3d(x, y, z, u, v, w, ...)
* quiver3d(x, y, z, f, ...)

  x,y,z=mgrid[-0:3:0.6,-0:3:0.6,0:3:0.3]
  r=sqrt(x**2+y**2+z**4)
  u=y*sin(r)/(r+0.001)
  v=-x*sin(r)/(r+0.001)
  w=zeros_like(r)
  mlab.quiver3d(x,y,z,u,v,w)
  mlab.colorbar()
  mlab.show()
python mayavi三维绘图
애니메이션
3 차원 동 도 를 그립 니 다.문서 의 코드 가 실 행 된 후에 애니메이션 효과 가 없습니다.다음 두 개의 예제 코드 는 mayavi 와 관련 된 소스 코드 를 보고 정리 한 것 입 니 다.관련 소스 코드 를 직접 보고 더 많은 공식 적 으로 제공 하 는 예제 코드 를 볼 수 있 습 니 다.
(1)

  @animate(delay=200) #       200ms
  def anim():
    n_mer, n_long = 6, 11
    pi = numpy.pi
    dphi = pi/1000.0
    phi = numpy.arange(0.0, 2 * pi + 0.5 * dphi, dphi, 'd')
    mu = phi * n_mer
    x = numpy.cos(mu) * (1+numpy.cos(n_long * mu/n_mer) * 0.5)
    y = numpy.sin(mu) * (1+numpy.cos(n_long * mu/n_mer) * 0.5)
    z = numpy.sin(n_long * mu/n_mer) * 0.5
    l = plot3d(x, y, z, numpy.sin(mu), tube_radius=0.025, colormap='Spectral')
    ms = l.mlab_source
    for i in range(100):
      x = numpy.cos(mu) * (1+numpy.cos(n_long * mu/n_mer + numpy.pi * (i+1)/5.) * 0.5)
      scalars = numpy.sin(mu + numpy.pi * (i+1)/5)
      #   shape size     set      
        ms.set(x=x, scalars=scalars)  
      yield
  anim()
  show()
(2)

  @animate #  500ms  
  def anim2():
    x, y = np.mgrid[0:3:1,0:3:1]
    s = mlab.surf(x, y, np.asarray(x*0.1, 'd'),representation='wireframe')
    fig = mlab.gcf()
    ms = s.mlab_source
    for i in range(15):
      x, y = np.mgrid[0:3:1.0/(i+2),0:3:1.0/(i+2)]
      sc = np.asarray(x*x*0.05*(i+1), 'd')
      ms.reset(x=x, y=y, scalars=sc)
      fig.scene.reset_zoom()
      yield
  anim2()
  show()
이상 의 python mayavi 3 차원 그림 에 대한 상세 한 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기