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?

brno792
fuente
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.

Hannes Ovrén
fuente
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-')
Steve Barnes
fuente
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

user3756936
fuente