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.

111
demandé sur dbmikus 2011-12-07 04:56:02

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')

exemple1

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()

exemple2

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.

206
répondu wim 2017-05-23 12:10:26

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()  

Cliquez ici pour voir l'image

19
répondu Wubin Ding 2017-11-06 10:29:27

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

13
répondu lost 2018-03-01 14:21:04