Setzen Sie Markierungen für einzelne Punkte auf einer Linie

Lesezeit: 4 Minuten

Benutzeravatar von dbmikus
dbmikus

Ich habe Matplotlib verwendet, um Linien auf einer Figur zu zeichnen. Jetzt möchte ich den Stil, insbesondere die Markierung, für einzelne Punkte auf der Linie festlegen. Wie mache ich das?

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

Wims Benutzeravatar
Wim

Geben Sie die Schlüsselwortargumente an linestyle und/oder marker in deinem Aufruf an plot.

Verwenden Sie beispielsweise eine gestrichelte Linie und blaue Kreismarkierungen:

plt.plot(range(10), linestyle="--", marker="o", color="b", label="line with marker")
plt.legend()

Ein Shortcut-Aufruf für dasselbe:

plt.plot(range(10), '--bo', label="line with marker")
plt.legend()

Geben Sie hier eine Bildbeschreibung ein

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
================    ===============================

bearbeiten: mit einem Beispiel für die Markierung 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, label="line with select markers")
plt.legend()
plt.show()

Geben Sie hier eine Bildbeschreibung ein

Dieses letzte Beispiel mit dem markevery kwarg ist seit 1.4+ aufgrund der Zusammenführung von möglich Dieser Feature-Zweig. Wenn Sie mit einer älteren Version von Matplotlib nicht weiterkommen, können Sie das Ergebnis immer noch erzielen, indem Sie dem Liniendiagramm ein Streudiagramm überlagern. Weitere Einzelheiten finden Sie im Bearbeitungsverlauf.

Odins Benutzer-Avatar
Odin

Es gibt ein Bild, das den Namen und die Beschreibung aller Markierungen zeigt. Ich hoffe, es hilft Ihnen.

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(figsize=(8, 8))

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.axis('off')
plt.tight_layout()
plt.show() 

Geben Sie hier eine Bildbeschreibung ein

Benutzer-Avatar von lost
verloren

Zum späteren Nachschlagen – die Line2D Künstler kam vorbei plot() hat auch eine set_markevery() Methode, mit der Sie Markierungen nur an bestimmten Punkten setzen können – siehe https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery

Pankaj Joshis Benutzeravatar
Pankaj Joshi

Ein einfacher Trick, um die Form und Größe einer bestimmten Punktmarkierung zu ändern, besteht darin, sie zunächst mit allen anderen Daten zu zeichnen und dann eine weitere Darstellung nur mit diesem Punkt (oder einer Reihe von Punkten, wenn Sie den Stil mehrerer Punkte ändern möchten) zu zeichnen. . Angenommen, wir möchten die Markierungsform des zweiten Punkts ändern:

x = [1,2,3,4,5]
y = [2,1,3,6,7]

plt.plot(x, y, "-o")
x0 = [2]
y0 = [1]
plt.plot(x0, y0, "s")

plt.show()

Ergebnis ist:
Grundstück mit mehreren Markierungen

Geben Sie hier eine Bildbeschreibung ein

Benutzer-Avatar von Ricardo Roa
Ricardo Roa

Hallo. Es gibt ein Beispiel:

import numpy as np
import matplotlib.pyplot as plt

def grafica_seno_coseno():
    x = np.arange(-4,2*np.pi, 0.3)
    y = 2*np.sin(x)
    y2 = 3*np.cos(x)
    plt.plot(x, y,  '-gD')
    plt.plot(x, y2, '-rD')
    for xitem,yitem in np.nditer([x,y]):
        etiqueta = "{:.1f}".format(xitem)
        plt.annotate(etiqueta, (xitem,yitem), textcoords="offset points",xytext=(0,10),ha="center")
    for xitem,y2item in np.nditer([x,y2]):
        etiqueta2 = "{:.1f}".format(xitem)
        plt.annotate(etiqueta2, (xitem,y2item), textcoords="offset points",xytext=(0,10),ha="center")
    plt.grid(True)
    plt.show()
    
    
grafica_seno_coseno()

Geben Sie hier eine Bildbeschreibung ein

1450230cookie-checkSetzen Sie Markierungen für einzelne Punkte auf einer Linie

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy