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.
| Markercode | Form |
|---|---|
'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:
| Farbe | Marker | Linienstil |
|---|---|---|
'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:
| Parameter | Was 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:
| Merkmal | plot() | scatter() |
|---|---|---|
| Markerform | Gleich für alle Punkte | Gleich für alle Punkte |
| Markergröße | Einheitlich | Punktweise (s-array) |
| Markerfarbe | Einheitlich | Punktweise (c-array + Colormap) |
| Leistung bei großen Datensätzen | Schneller | Langsamer |
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
markeredgecolorauf hellemmarkerfacecolorjeden 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
- Matplotlib-Liniendiagramme — Linienstil zusammen mit Markern anpassen
- Matplotlib-Streudiagramm — punktgenaue Größen- und Farbsteuerung
- Matplotlib-Beschriftungen — Achsenbeschriftungen und Titel zu Diagrammen hinzufügen
- Matplotlib-Plotting-Übersicht — ein Überblick über alle wichtigen Diagrammtypen