2012-11-05 7 views
5

각 단계에서 이와 같은 방법으로 펄스 전파를 플로팅하고 싶습니다. 펄스 모양을 그립니다. 즉, y의 각 값에 대해 x-z 플롯의 세리에트가 필요합니다. 이와 같은 것 (색이 없음) : Pulse propagation3d에서 Matplotlib 플롯 펄스 전파

어떻게하면 matplotlib (또는 Mayavi)를 사용하여이 작업을 수행 할 수 있습니까?

def drawPropagation(beta2, C, z): 
    """ beta2 in ps/km 
     C is chirp 
     z is an array of z positions """ 
    T = numpy.linspace(-10, 10, 100) 
    sx = T.size 
    sy = z.size 

    T = numpy.tile(T, (sy, 1)) 
    z = numpy.tile(z, (sx, 1)).T 

    U = 1/numpy.sqrt(1 - 1j*beta2*z * (1 + 1j * C)) * numpy.exp(- 0.5 * (1 + 1j * C) * T * T/(1 - 1j*beta2*z*(1 + 1j*C))) 

    fig = pyplot.figure() 
    ax = fig.add_subplot(1,1,1, projection='3d') 
    surf = ax.plot_wireframe(T, z, abs(U)) 
+1

이 문서에서 예제 : 당신이 곡선을해야하는 경우 흰 색으로 채워진 http://matplotlib.org/examples/mplot3d/bars3d_demo.html –

답변

8

변경에 :

ax.plot_wireframe(T, z, abs(U), cstride=1000) 

과 전화 :

enter image description here

:

drawPropagation(1.0, 1.0, numpy.linspace(-2, 2, 10)) 

는 다음과 같은 그래프를 만들 것입니다 여기에 지금까지 한 일이다

import numpy 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import pyplot 
from matplotlib.collections import PolyCollection 

def drawPropagation(beta2, C, z): 
    """ beta2 in ps/km 
     C is chirp 
     z is an array of z positions """ 
    T = numpy.linspace(-10, 10, 100) 
    sx = T.size 
    sy = z.size 

    T = numpy.tile(T, (sy, 1)) 
    z = numpy.tile(z, (sx, 1)).T 

    U = 1/numpy.sqrt(1 - 1j*beta2*z * (1 + 1j * C)) * numpy.exp(- 0.5 * (1 + 1j * C) * T * T/(1 - 1j*beta2*z*(1 + 1j*C))) 

    fig = pyplot.figure() 
    ax = fig.add_subplot(1,1,1, projection='3d') 
    U = numpy.abs(U) 

    verts = [] 
    for i in xrange(T.shape[0]): 
     verts.append(zip(T[i, :], U[i, :])) 

    poly = PolyCollection(verts, facecolors=(1,1,1,1), edgecolors=(0,0,1,1)) 
    ax.add_collection3d(poly, zs=z[:, 0], zdir='y') 
    ax.set_xlim3d(numpy.min(T), numpy.max(T)) 
    ax.set_ylim3d(numpy.min(z), numpy.max(z)) 
    ax.set_zlim3d(numpy.min(U), numpy.max(U)) 

drawPropagation(1.0, 1.0, numpy.linspace(-2, 2, 10)) 
pyplot.show() 
다음

enter image description here

관련 문제