2012-05-13 26 views
12

En el código siguiente, ¿cómo creo líneas conectando cada par de gráficos de dispersión (es decir, uniendo el círculo verde a la punta de flecha amarilla) creados por las dos líneas de código hacia el final justo antes de la instrucción .show()?Conectando dos puntos en un diagrama de dispersión 3D en Python y matplotlib

import matplotlib.pyplot 
from mpl_toolkits.mplot3d import Axes3D 

dates  = [20020514, 20020515, 20020516, 20020517, 20020520] 
highs  = [1135, 1158, 1152, 1158, 1163] 
lows  = [1257, 1253, 1259, 1264, 1252] 
upperLimits = [1125.0, 1125.0, 1093.75, 1125.0, 1125.0] 
lowerLimits = [1250.0, 1250.0, 1156.25, 1250.0, 1250.0] 

zaxisvalues0= [0, 0, 0, 0, 0] 
zaxisvalues1= [1, 1, 1, 1, 1] 
zaxisvalues2= [2, 2, 2, 2, 2] 

fig = matplotlib.pyplot.figure() 
ax = fig.add_subplot(111, projection = '3d') 

ax.plot(dates, zaxisvalues1, lowerLimits, color = 'b') 
ax.plot(dates, zaxisvalues2, upperLimits, color = 'r') 

ax.scatter(dates, zaxisvalues0, highs, color = 'g', marker = "o") 
ax.scatter(dates, zaxisvalues0, lows, color = 'y', marker = "^") 

matplotlib.pyplot.show() 

Respuesta

17

dibujar un segmento de línea entre los puntos:

import matplotlib.pyplot 
from mpl_toolkits.mplot3d import Axes3D 

dates  = [20020514, 20020515, 20020516, 20020517, 20020520] 
highs  = [1135, 1158, 1152, 1158, 1163] 
lows  = [1257, 1253, 1259, 1264, 1252] 
upperLimits = [1125.0, 1125.0, 1093.75, 1125.0, 1125.0] 
lowerLimits = [1250.0, 1250.0, 1156.25, 1250.0, 1250.0] 

zaxisvalues0= [0, 0, 0, 0, 0] 
zaxisvalues1= [1, 1, 1, 1, 1] 
zaxisvalues2= [2, 2, 2, 2, 2] 

fig = matplotlib.pyplot.figure() 
ax = fig.add_subplot(111, projection = '3d') 

ax.plot(dates, zaxisvalues1, lowerLimits, color = 'b') 
ax.plot(dates, zaxisvalues2, upperLimits, color = 'r') 

for i,j,k,h in zip(dates,zaxisvalues0,lows,highs): 
    ax.plot([i,i],[j,j],[k,h],color = 'g') 

ax.scatter(dates, zaxisvalues0, highs, color = 'g', marker = "o") 
ax.scatter(dates, zaxisvalues0, lows, color = 'y', marker = "^") 

matplotlib.pyplot.show() 

Produce:

enter image description here

+0

magnífico! Gracias, Mark. Nunca me di cuenta de que puedo trazar puntos individuales a voluntad (en lugar de una serie de una matriz o lista). ¿Qué pasaría si quisiera dibujar un rectángulo en lugar de una línea? Intenté cambiar "ax.plot" por "ax.bar" en tu ciclo "for" pero en su lugar obtuve líneas asimétricas. ¿Hay alguna manera de dibujar un rectángulo? Gracias por adelantado. – Zambi

+3

@Zambi ¡Bienvenido a Stackoverflow! En lugar de abordar preguntas adicionales, tiene más sentido aquí hacer una nueva pregunta. – Hooked

+0

Zambi, como dijo @Hooked, es mejor abrir una nueva pregunta para que la comunidad en general pueda verla. Sin embargo, un vistazo rápido, tiene dos opciones, dibuje los 4 lados del rectángulo con líneas de "trazado" o investigue usando PolyCollection (http://matplotlib.sourceforge.net/examples/mplot3d/polys3d_demo.html) – Mark

Cuestiones relacionadas