Matplotlib conecta puntos de diagrama de dispersión con línea - Python


102

Tengo dos listas, fechas y valores. Quiero trazarlos usando matplotlib. Lo siguiente crea un diagrama de dispersión de mis datos.

import matplotlib.pyplot as plt

plt.scatter(dates,values)
plt.show()

plt.plot(dates, values) crea un gráfico de líneas.

Pero lo que realmente quiero es un diagrama de dispersión donde los puntos estén conectados por una línea.

Similar a en R:

plot(dates, values)
lines(dates, value, type="l")

, lo que me da un diagrama de dispersión de puntos superpuestos con una línea que conecta los puntos.

¿Cómo hago esto en Python?


5
¿Llamar show()después de llamar a ambos scatter()y plot()primero?

Respuestas:


136

Creo que @Evert tiene la respuesta correcta:

plt.scatter(dates,values)
plt.plot(dates, values)
plt.show()

Que es más o menos lo mismo que

plt.plot(dates, values, '-o')
plt.show()

o cualquier estilo de línea que prefieras.


3
'linestyle' fue la buena pista de búsqueda de palabras clave para que yo pudiera recorrer los documentos de matplotlib (gynormous).
Reb.Cabin

2
@aaronsnoswell El tamaño y el color solo tienen sentido para los puntos, que aún puede trazar scatter, como en mi primer ejemplo. La pregunta no dice nada sobre un grosor o color de línea variable, así que creo que su crítica es un poco injusta, de verdad.
Hannes Ovrén

28

Para líneas rojas y puntos

plt.plot(dates, values, '.r-') 

o para marcadores x y líneas azules

plt.plot(dates, values, 'xb-')

Parece que tú, Evert y Kigurai están bien. Puede llamar tanto a scatter () como a plot () antes de llamar a show (). O simplemente llame a plot () con los atributos de línea y punto como describió Steve Barnes. Gracias
brno792

14

Además de lo proporcionado en las otras respuestas, la palabra clave "zorder" le permite a uno decidir el orden en el que los diferentes objetos se trazan verticalmente. P.ej:

plt.plot(x,y,zorder=1) 
plt.scatter(x,y,zorder=2)

traza los símbolos de dispersión en la parte superior de la línea, mientras que

plt.plot(x,y,zorder=2)
plt.scatter(x,y,zorder=1)

traza la línea sobre los símbolos de dispersión.

Ver, por ejemplo, la demostración de zorder

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.