2011-12-10 10 views

Odpowiedz

11

Nie jestem świadomy żadnego bezpośredniego odpowiednika stem3 w matplotlib. Jednakże, nie jest trudno jest wyciągnąć takie postacie (przynajmniej w swojej formie podstawowej) za pomocą 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. Wygląda to jeszcze ładniej niż przykład na stronie Matlaba. Czy to możliwe, żeby mieć małe kulki na liniach? – EOL

+1

Dzięki za dostarczenie impulsu do realizacji tego. Na początku myślałem, że będę musiał nałożyć wykres rozproszenia, ale wygląda na to ustawienie [marker] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_marker) i użycie [ set_markevery (2)] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_markevery) może również działać. – unutbu

+0

Doskonała odpowiedź. +1 – ptomato

3

jako unutbu, zaledwie z konwencjonalnym działki:

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

Powiązane problemy