2012-11-05 32 views
5

Tôi muốn vẽ âm mưu xung theo cách như vậy ở mỗi bước, nó vẽ hình dạng xung. Nói cách khác, tôi muốn một serie x-z lô, cho mỗi giá trị của y. Một cái gì đó như thế này (không có màu sắc): Pulse propagationTuyên bố xung âm mưu Matplotlib trong 3d

Tôi có thể làm điều này bằng cách sử dụng matplotlib (hoặc Mayavi) như thế nào? Đây là những gì tôi đã làm cho đến nay:

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

Dưới đây là một ví dụ từ các tài liệu: http://matplotlib.org/examples/mplot3d/bars3d_demo.html –

Trả lời

8

Thay đổi:

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

và gọi:

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

sẽ tạo ra các đồ thị dưới đây:

enter image description here

Nếu bạn cần các đường cong được lấp đầy với màu trắng:

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

Các vấn đề liên quan