matplotlib: définir des marqueurs pour les points individuels sur une ligne
J'ai utilisé matplotlib pour tracer des lignes sur une figure. Maintenant, je voudrais maintenant définir le style, en particulier le marqueur, pour les points individuels sur la ligne. Comment dois-je faire?
Modifier: pour clarifier ma question, qui a été répondue, je veux être en mesure de définir le style pour les marqueurs individuels sur une ligne, pas tous les marqueurs sur ladite ligne.
3 réponses
Spécifiez le mot-clé args linestyle
et / ou marker
dans votre appel à plot
.
Par exemple, en utilisant une ligne pointillée et des marqueurs de cercle bleu:
plt.plot(range(10), linestyle='--', marker='o', color='b')
Un appel de raccourci pour la même chose:
plt.plot(range(10), '--bo')
Voici une liste des styles de ligne et de marqueur possibles:
================ ===============================
character description
================ ===============================
- solid line style
-- dashed line style
-. dash-dot line style
: dotted line style
. point marker
, pixel marker
o circle marker
v triangle_down marker
^ triangle_up marker
< triangle_left marker
> triangle_right marker
1 tri_down marker
2 tri_up marker
3 tri_left marker
4 tri_right marker
s square marker
p pentagon marker
* star marker
h hexagon1 marker
H hexagon2 marker
+ plus marker
x x marker
D diamond marker
d thin_diamond marker
| vline marker
_ hline marker
================ ===============================
edit:, avec un exemple de marquage d'un sous-ensemble arbitraire de points, comme l'a demandé dans les commentaires:
import numpy as np
import matplotlib.pyplot as plt
xs = np.linspace(-np.pi, np.pi, 30)
ys = np.sin(xs)
markers_on = [12, 17, 18, 19]
plt.plot(xs, ys, '-gD', markevery=markers_on)
plt.show()
Ce dernier exemple en utilisant le markevery
kwarg est possible depuis la 1.4+, en raison de la fusion de cette branche. Si vous êtes bloqué sur une ancienne version de matplotlib, vous pouvez toujours obtenir le résultat en superposant un nuage de points sur le tracé linéaire. Voir l'historique des modifications pour plus de détails.
Il y a une image montrer le nom et la description de tous les marqueurs, j'espère que cela vous aidera.
import matplotlib.pylab as plt
markers=['.',',','o','v','^','<','>','1','2','3','4','8','s','p','P','*','h','H','+','x','X','D','d','|','_']
descriptions=['point', 'pixel', 'circle', 'triangle_down', 'triangle_up','triangle_left', 'triangle_right', 'tri_down', 'tri_up', 'tri_left','tri_right', 'octagon', 'square', 'pentagon', 'plus (filled)','star', 'hexagon1', 'hexagon2', 'plus', 'x', 'x (filled)','diamond', 'thin_diamond', 'vline', 'hline']
x=[]
y=[]
for i in range(5):
for j in range(5):
x.append(i)
y.append(j)
plt.figure()
for i,j,m,l in zip(x,y,markers,descriptions):
plt.scatter(i,j,marker=m)
plt.text(i-0.15,j+0.15,s=m+' : '+l)
plt.axis([-0.1,4.8,-0.1,4.5])
plt.tight_layout()
plt.axis('off')
plt.show()
Pour référence future - l'artiste Line2D
renvoyé par plot()
a également une méthode set_markevery()
qui vous permet de ne Définir que des marqueurs sur certains points-Voir https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery