web-dev-qa-db-de.com

matplotlib: Markierungen für einzelne Punkte auf einer Linie setzen

Ich habe matplotlib verwendet, um Linien auf eine Figur zu zeichnen. Nun möchte ich den Stil, speziell den Marker, für einzelne Punkte auf der Linie festlegen. Wie mache ich das?

Bearbeiten: Um meine Frage zu klären, die beantwortet wurde, möchte ich den Stil für einzelne Markierungen in einer Zeile festlegen können, nicht für jede Markierung in dieser Zeile.

136
dbmikus

Geben Sie in Ihrem Aufruf an linestyle das Schlüsselwort args marker und/oder plot an.

Verwenden Sie beispielsweise eine gestrichelte Linie und blaue Kreismarkierungen:

plt.plot(range(10), linestyle='--', marker='o', color='b')

Ein Tastenkürzel für das Gleiche:

plt.plot(range(10), '--bo')

example1

Hier ist eine Liste der möglichen Linien- und Markierungsstile:

================    ===============================
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: mit einem Beispiel für das Markieren einer beliebigen Teilmenge von Punkten, wie in den Kommentaren gefordert:

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

example2

Dieses letzte Beispiel mit dem markevery kwarg ist seit 1.4+ möglich, da dieser Feature-Zweig zusammengeführt wurde. Wenn Sie mit einer älteren Version von matplotlib arbeiten, können Sie das Ergebnis dennoch erzielen, indem Sie ein Streudiagramm über das Liniendiagramm legen. Weitere Informationen finden Sie in Verlauf bearbeiten .

266
wim

Es gibt ein Bild mit dem Namen und der Beschreibung aller Marker. Ich hoffe, es wird Ihnen helfen.

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

example1

41
Wubin Ding

Zum späteren Nachschlagen - der von plot() zurückgegebene Künstler Line2D Hat auch eine set_markevery() -Methode, mit der Sie nur Markierungen für bestimmte Punkte setzen können - siehe https: //matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery

14
lost