2011-12-10 12 views

Respuesta

11

No tengo conocimiento de ningún equivalente directo de stem3 en matplotlib. Sin embargo, no es difícil trazar estas cifras (al menos en su forma básica) usando 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. Esto se ve incluso mejor que el ejemplo en la página de Matlab. ¿Es posible tener las bolitas encima de las líneas también? – EOL

+1

Gracias por proporcionar el ímpetu para seguir esto. Al principio pensé que tendría que superponer un diagrama de dispersión, pero parece que está configurando un [marcador] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_marker) y usando [ set_markevery (2)] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_markevery) también puede hacerlo. – unutbu

+0

Excelente respuesta. +1 – ptomato

3

Como de unutbu, simplemente con una trama convencional:

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

Cuestiones relacionadas