W3docs

Matplotlib-Marker

Matplotlib-Marker in Python verwenden und anpassen. Alle Stile, Größen, Farben, Füllungen und punktgenaue Anpassung werden erklärt.

Marker sind die Symbole, die Matplotlib an jedem Datenpunkt in einem Diagramm zeichnet. Die richtige Markerstil-Wahl — und das Wissen, wie man Größe, Farbe und Füllung anpasst — kann den Unterschied zwischen einem unübersichtlichen Diagramm und einem machen, das klar kommuniziert. Diese Seite beschreibt alle in Matplotlib verfügbaren Markerstile, erklärt, wie das Erscheinungsbild angepasst wird, und zeigt, wann plot() gegenüber scatter() für punktgenaue Steuerung zu bevorzugen ist.

Was ist ein Marker in Matplotlib?

Ein Marker ist eine Form, die an jeder (x, y)-Koordinate in einem Diagramm gerendert wird. Welche Form verwendet wird, steuert man mit dem Parameter marker (oder als Teil eines Formatstrings). Marker sind von der Verbindungslinie zwischen Datenpunkten unabhängig — man kann das eine ohne das andere anzeigen.

import matplotlib.pyplot as plt

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

# Line with markers
plt.plot(x, y, marker='o')

# Markers only — no connecting line
plt.plot(x, y, marker='s', linestyle='None')

plt.show()

Alle eingebauten Markerstile

Matplotlib enthält mehr als 30 eingebaute Markercodes. Die folgende Tabelle listet die am häufigsten verwendeten auf.

MarkercodeForm
'o'Kreis
's'Quadrat
'D'Diamant
'd'Schmaler Diamant
'^'Dreieck (oben)
'v'Dreieck (unten)
'<'Dreieck (links)
'>'Dreieck (rechts)
'p'Pentagon
'h'Hexagon 1
'H'Hexagon 2
'8'Oktagon
'*'Stern
'+'Plus
'x'Kreuz
'X'Gefülltes Kreuz
`''`
'_'Waagerechte Linie
'.'Punkt (kleiner Dot)
','Pixel
'1'Tri-down
'2'Tri-up
'3'Tri-left
'4'Tri-right
'None' oder ''Kein Marker

Um alle Marker auf einmal zu sehen, kann man über matplotlib.markers.MarkerStyle.markers iterieren:

import matplotlib.pyplot as plt
import matplotlib.markers as mmarkers

print(list(mmarkers.MarkerStyle.markers.keys()))

Marker in einem Liniendiagramm verwenden

Die Funktion plot() akzeptiert ein marker-Argument. Es wendet denselben Marker auf jeden Datenpunkt an.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

plt.plot(x, y, marker='o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Line plot with circle markers')
plt.show()

Einen Formatstring verwenden

Anstelle von separaten Schlüsselwortargumenten kann man Linienstil, Farbe und Marker in einem einzigen Formatstring kombinieren: '[color][marker][linestyle]'.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

# Red circles connected by a dashed line
plt.plot(x, y, 'ro--')
plt.title('Format string: red circles, dashed line')
plt.show()

Häufige Formatstring-Komponenten:

FarbeMarkerLinienstil
'r' Rot'o' Kreis'-' durchgezogen
'g' Grün's' Quadrat'--' gestrichelt
'b' Blau'^' Dreieck':' gepunktet
'k' Schwarz'*' Stern'-.' Strich-Punkt
'm' Magenta'+' Plus'None' keine Linie

Markeraussehen anpassen

Matplotlib bietet vier Schlüsselwortargumente für die detaillierte Markersteuerung:

ParameterWas er steuert
markersize (oder ms)Markerdurchmesser in Punkten
markerfacecolor (oder mfc)Füllfarbe des Markers
markeredgecolor (oder mec)Farbe des Markerrandes
markeredgewidth (oder mew)Breite des Markerrandes in Punkten
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]

plt.plot(
    x, y,
    marker='o',
    markersize=12,
    markerfacecolor='gold',
    markeredgecolor='navy',
    markeredgewidth=2,
)
plt.title('Customized circle markers')
plt.show()

Hohle Marker

Setze markerfacecolor='none' (Kleinbuchstaben-string), um nur den Rand zu zeichnen und einen hohlen Marker zu erstellen:

import matplotlib.pyplot as plt

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

plt.plot(x, y, marker='s', markersize=14, markerfacecolor='none', markeredgecolor='steelblue', markeredgewidth=2)
plt.title('Hollow square markers')
plt.show()

Füllstil

Der Parameter fillstyle steuert, welcher Teil des Markers gefüllt wird. Gültige Werte sind 'full', 'left', 'right', 'bottom', 'top' und 'none'.

import matplotlib.pyplot as plt

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

plt.plot(x, y, marker='o', markersize=16, fillstyle='left', markerfacecolor='crimson', markeredgecolor='black')
plt.title('Half-filled circle markers (fillstyle="left")')
plt.show()

Punktgenaue Markersteuerung mit scatter()

plot() wendet einen einheitlichen Marker auf die gesamte Linie an. Wenn jeder Punkt eine andere Größe oder Farbe haben soll — etwa um eine dritte Variable zu kodieren — verwendet man stattdessen scatter().

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
sizes  = [40, 100, 200, 80, 160]   # area in points²
colors = [0.2, 0.5, 0.8, 0.3, 0.9]  # mapped through colormap

sc = plt.scatter(x, y, s=sizes, c=colors, cmap='plasma', edgecolors='black')
plt.colorbar(sc, label='Value')
plt.title('Per-point size and color with scatter()')
plt.show()

Wesentliche Unterschiede zwischen plot() und scatter() bei Markern:

Merkmalplot()scatter()
MarkerformGleich für alle PunkteGleich für alle Punkte
MarkergrößeEinheitlichPunktweise (s-array)
MarkerfarbeEinheitlichPunktweise (c-array + Colormap)
Leistung bei großen DatensätzenSchnellerLangsamer

Mehrere Datenreihen mit unterschiedlichen Markern

Verwende separate plot()-Aufrufe, um jeder Reihe einen eigenen Marker zuzuweisen, und füge dann eine Legende hinzu:

import matplotlib.pyplot as plt

months = [1, 2, 3, 4, 5, 6]
product_a = [120, 135, 110, 150, 140, 160]
product_b = [80,  95, 100,  90, 115, 130]
product_c = [60,  70,  65,  85,  90,  95]

plt.plot(months, product_a, marker='o', label='Product A')
plt.plot(months, product_b, marker='s', label='Product B')
plt.plot(months, product_c, marker='^', label='Product C')

plt.xlabel('Month')
plt.ylabel('Units sold')
plt.title('Monthly sales by product')
plt.legend()
plt.show()

Marker ohne Verbindungslinie

Die Übergabe von linestyle='None' (oder ls='None') entfernt die Linie und lässt nur die Marker übrig — praktisch ein Streudiagramm mit plot().

import matplotlib.pyplot as plt

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

plt.plot(x, y, marker='D', linestyle='None', color='darkorange', markersize=10)
plt.title('Diamond markers, no line')
plt.show()

Dieses Muster ist nützlich, wenn die Reihenfolge der Datenpunkte wichtig ist (die ursprüngliche x-Sortierung bleibt erhalten), aber keine Linie einen kontinuierlichen Trend suggerieren soll.

Praktische Tipps

  • Den Marker an die Datendichte anpassen. Bei Tausenden von Punkten kleine Marker ('.' oder ',') verwenden; bei wenigen Messungen größere Formen ('o', 's').
  • Für ausreichenden Kontrast sorgen. Auf weißem Hintergrund hält ein dunkles markeredgecolor auf hellem markerfacecolor jeden Punkt auch in kleiner Größe sichtbar.
  • Ein einzelnes Diagramm nicht überladen. Mehr als fünf verschiedene Markerstile in einem Diagramm machen die Legende schwer lesbar — Subplots oder alleinige Farbkodierung sind dann besser.
  • scatter() für die Kodierung einer dritten Variable verwenden. Größen- oder Farb-arrays, die auf eine Colormap abgebildet werden, kommunizieren eine zusätzliche Dimension, ohne weitere Reihen zur Legende hinzuzufügen.

Verwandte Themen

Was this page helpful?