2012-10-12 21 views
77

Soy bastante nuevo para python/matplotlib y lo uso a través del cuaderno ipython. Estoy intentando agregar algunas líneas de anotación a un gráfico existente y no puedo entender cómo representar las líneas en un gráfico. Así, por ejemplo, si yo trazo la siguiente:Agregar una línea arbitraria a un diagrama de matplotlib en el cuaderno ipython

import numpy as np 
np.random.seed(5) 
x = arange(1, 101) 
y = 20 + 3 * x + np.random.normal(0, 60, 100) 
p = plot(x, y, "o") 

me sale el siguiente gráfico:

beautiful scatter plot

Entonces, ¿cómo iba a añadir una línea vertical desde (70.100) hasta (70.250) ? ¿Qué pasa con una línea diagonal de (70,100) a (90,200)?

He intentado algunas cosas con Line2D() resultando en nada más que la confusión de mi parte. En R simplemente usaría la función de segmentos() que agregaría segmentos de línea. ¿Hay un equivalente en matplotlib?

Respuesta

131

Puede representar directamente las líneas que desea alimentando el comando plot con los datos correspondientes (límites de los segmentos) :

plot([x1, x2], [y1, y2], color='k', linestyle='-', linewidth=2)

(por supuesto, usted puede elegir el color, grosor de línea, estilo de línea, etc.)

de su ejemplo:

import numpy as np 
import matplotlib.pyplot as plt 

np.random.seed(5) 
x = np.arange(1, 101) 
y = 20 + 3 * x + np.random.normal(0, 60, 100) 
plt.plot(x, y, "o") 


# draw vertical line from (70,100) to (70, 250) 
plt.plot([70, 70], [100, 250], 'k-', lw=2) 

# draw diagonal line from (70, 90) to (90, 200) 
plt.plot([70, 90], [90, 200], 'k-') 

plt.show() 

new chart

+0

¡excelente respuesta con ilustraciones excelentes y completas! ¡muchas muchas gracias! –

+2

Corrección secundaria, el código anterior debe leer 'x = np.arange (1, 101)'. –

+0

Esto no dibujará