2011-12-10 31 views

Trả lời

11

Tôi không biết bất kỳ tương đương trực tiếp nào của stem3 trong matplotlib. Tuy nhiên, nó không phải là khó khăn để vẽ nhân vật như vậy (ít nhất là trong hình thức cơ bản của nó) sử dụng Line3D s:

import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.art3d as art3d 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 

N = 100 
theta = np.linspace(0, 2*np.pi, N, endpoint=False) 
x = np.cos(theta) 
y = np.sin(theta) 
z = range(N) 
for xi, yi, zi in zip(x, y, z):   
    line=art3d.Line3D(*zip((xi, yi, 0), (xi, yi, zi)), marker='o', markevery=(1, 1)) 
    ax.add_line(line) 
ax.set_xlim3d(-1, 1) 
ax.set_ylim3d(-1, 1) 
ax.set_zlim3d(0, N)  
plt.show() 

enter image description here

+1

+1. Điều này trông đẹp hơn ví dụ trên trang của Matlab. Có thể có những quả bóng nhỏ trên đầu dòng không? – EOL

+1

Cảm ơn bạn đã cung cấp động lực để theo đuổi điều này. Lúc đầu, tôi nghĩ rằng tôi phải che phủ một âm mưu phân tán, nhưng nó xuất hiện thiết lập một [điểm đánh dấu] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_marker) và sử dụng [ set_markevery (2)] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_markevery) cũng có thể thực hiện. – unutbu

+0

Câu trả lời hay. +1 – ptomato

3

Như của unutbu, chỉ với một cốt truyện thông thường:

In [20]: from mpl_toolkits.mplot3d import Axes3D 
In [21]: fig = figure() 
In [22]: ax = fig.add_subplot(111, projection='3d') 
In [23]: x = [2,4,1,3] 
In [24]: y = [3,5,6,7] 
In [25]: z = [4,5,6,7] 
In [26]: for xx,yy,zz in zip(x,y,z): plot([xx,xx],[yy,yy],[0,zz], '-') 

enter image description here

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