J'ai utilisé matplotlib pour tracer des lignes sur une figure. Maintenant, je voudrais maintenant définir le style, en particulier le marqueur, pour des points individuels sur la ligne. Comment puis-je faire cela?
Edit: pour clarifier ma question, à laquelle une réponse a été apportée, je souhaite pouvoir définir le style des marqueurs individuels sur une ligne, et non de tous les marqueurs de cette ligne.
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
================ ===============================
éditez: avec un exemple de marquage d'un sous-ensemble arbitraire de points, comme 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 utilisant la markevery
kwarg est possible depuis 1.4+, en raison de la fusion de cette branche de fonctionnalité . Si vous êtes bloqué sur une ancienne version de matplotlib, vous pouvez toujours obtenir le résultat en superposant un diagramme de dispersion sur le tracé. Voir le modifier l'historique pour plus de détails.
Il y a une photo montrant 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()
dispose également d'une méthode set_markevery()
qui vous permet de définir des marqueurs uniquement sur certains points - voir https://matplotlib.org /api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery