Matplotlib connecte des points de nuage de points avec une ligne - Python

103

J'ai deux listes, dates et valeurs. Je veux les tracer en utilisant matplotlib. Ce qui suit crée un nuage de points de mes données.

import matplotlib.pyplot as plt

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

plt.plot(dates, values) crée un graphique linéaire.

Mais ce que je veux vraiment, c'est un nuage de points où les points sont reliés par une ligne.

Similaire à R:

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

, ce qui me donne un nuage de points de points superposé avec une ligne reliant les points.

Comment faire cela en python?

brno792
la source
5
Appeler show()après avoir appelé les deux scatter()et en plot()premier?

Réponses:

136

Je pense que @Evert a la bonne réponse:

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

Ce qui est à peu près le même que

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

ou quel que soit le style de ligne que vous préférez.

Hannes Ovrén
la source
3
'linestyle' était le bon indice de recherche par mot-clé pour me permettre de parcourir les documents (gynormous) de matplotlib.
Reb.Cabin le
2
@aaronsnoswell La taille et la couleur n'ont de sens que pour les points, que vous pouvez toujours tracer scatter, comme dans mon premier exemple. La question ne dit rien sur une épaisseur ou une couleur de ligne variable, donc je pense que votre critique est un peu injuste, vraiment.
Hannes Ovrén
28

Pour les lignes rouges et les points

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

ou pour les marqueurs x et les lignes bleues

plt.plot(dates, values, 'xb-')
Steve Barnes
la source
On dirait que vous, Evert et Kigurai vont bien. Vous pouvez appeler à la fois scatter () et plot () avant d'appeler show (). Ou appelez simplement plot () avec les attributs line et point comme Steve Barnes l'a décrit. Merci
brno792
14

En plus de ce qui est fourni dans les autres réponses, le mot-clé "zorder" permet de décider de l'ordre dans lequel les différents objets sont tracés verticalement. Par exemple:

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

trace les symboles scatter en haut de la ligne, tandis que

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

trace la ligne sur les symboles scatter.

Voir, par exemple, la démo de zorder

user3756936
la source