Matplotlib-Funktion scatter()
Matplotlib-Referenzdokumentation
scatter()Wird zum Zeichnen von Streudiagrammen verwendet; für jeden Datenpunkt können Größe, Farbe und Transparenz unabhängig festgelegt werden.
Im Gegensatz zu plot() ermöglicht scatter(), dass jeder Punkt unterschiedliche Darstellungsattribute hat, wodurch es sich für die Darstellung der Verteilungsbeziehung von drei- oder vierdimensionalen Daten eignet.
Funktionsdefinition
pyplot-Schnittstelle
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker='o', cmap=None,
norm=None, vmin=None, vmax=None, alpha=None, linewidths=None,
edgecolors=None, **kwargs)
Axes-Schnittstelle
Axes.scatter(x, y, s=None, c=None, marker='o', cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None,
**kwargs)
Parameterbeschreibung
| Parameter | Type | Beschreibung |
|---|---|---|
| x, y | array-ähnlich | Die x- und y-Koordinaten der Datenpunkte (erforderlich) |
| s | float oder array-ähnlich | Die Größe der Punkte; kann ein Skalar (alle Punkte gleich) oder ein Array (jeder Punkt eine andere Größe) sein |
| c | Farbe oder array-ähnlich | Die Farbe der Punkte; kann eine feste Farbe oder ein numerisches Array sein (wird mit cmap zur Farbzuordnung verwendet) |
| marker | str | Markerform: 'o' (Kreis), 's' (Quadrat), '^' (aufwärtsgerichtetes Dreieck), 'v' (abwärtsgerichtetes Dreieck), 'D' (Raute), '*' (Stern), '+' (Plus), 'x' (x), usw., Standard ist 'o' |
| cmap | str oder Colormap | Farbzuordnung, verwendet, wenn c ein numerisches Array ist, z. B. 'viridis', 'plasma' |
| norm | Normalize | Die Normalisierungsmethode zur Zuordnung von Daten zu Farben |
| vmin, vmax | float | Der Datenbereich für die Farbzuordnung; Punkte außerhalb des Bereichs werden abgeschnitten |
| Alpha | float oder array-ähnlich | Transparenz, zwischen 0-1 |
| linewidths | float oder array-ähnlich | Linienbreite der Punktkante |
| edgecolors | Farbe oder array-ähnlich | Kantenfarbe der Punkte, 'face' verwendet die Füllfarbe, 'none' bedeutet keine Kante |
| label | str | Legendenbeschriftung |
Der Kernvorteil von scatter() ist, dass
s、c、alphaes können Arrays derselben Länge wie x/y sein, was es einem einzelnen Streudiagramm ermöglicht, gleichzeitig 3-4 Dimensionen von Dateninformationen darzustellen.
Anwendungsbeispiele
Beispiel 1: Einfaches Streudiagramm
Beispiel
import numpy as np
# Zufällige Daten generieren
np.random.seed(42)
x = np.random.rand(50)
y = np.random.rand(50)
fig, ax = plt.subplots(layout='constrained')
ax.scatter(x, y, color='steelblue', edgecolors='white',
linewidth=0.5, s=80)
ax.set_title('Einfaches Streudiagramm')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.grid(True, alpha=0.3)
plt.show()
Beispiel 2: Variierende Größe und Farbe (Darstellung mehrdimensionaler Daten)
Beispiel
import numpy as np
np.random.seed(42)
n = 100
# Vier Dimensionen von Daten
x = np.random.rand(n) * 10 # Dimension 1: x-Koordinate
y = np.random.rand(n) * 10 # Dimension 2: y-Koordinate
colors = np.random.rand(n) * 100 # Dimension 3: Farbe (numerisch)
sizes = np.random.rand(n) * 300 # Dimension 4: Größe
alpha_values = np.random.rand(n) * 0.7 + 0.3 # Dimension 5: Transparenz
fig, ax = plt.subplots(figsize=(8, 6), layout='constrained')
scatter = ax.scatter(x, y,
c=colors, # Farbe ändert sich mit den Daten
s=sizes, # Größe ändert sich mit den Daten
alpha=0.6, # Feste Transparenz
cmap='viridis', # Farbzuordnung
edgecolors='white',
linewidth=0.5)
# Farbleiste hinzufügen
cbar = fig.colorbar(scatter, ax=ax)
cbar.set_label('Farbwert')
ax.set_title('Mehrdimensionales Streudiagramm')
ax.set_xlabel('X-Koordinate')
ax.set_ylabel('Y-Koordinate')
ax.grid(True, alpha=0.2)
plt.show()
Beispiel 3: Vergleich mehrerer Streudiagramm-Gruppen
Beispiel
import numpy as np
np.random.seed(42)
# Drei Datengruppen mit unterschiedlichen Verteilungen generieren
group1_x = np.random.normal(2, 0.5, 100)
group1_y = np.random.normal(2, 0.5, 100)
group2_x = np.random.normal(6, 0.5, 100)
group2_y = np.random.normal(6, 0.5, 100)
group3_x = np.random.normal(4, 1.0, 100)
group3_y = np.random.normal(4, 1.0, 100)
fig, ax = plt.subplots(figsize=(8, 6), layout='constrained')
# Jede Gruppe verwendet eine andere Farbe und einen anderen Marker
ax.scatter(group1_x, group1_y, c='#e74c3c', marker='o',
s=60, label='Gruppe A (dichter Cluster)')
ax.scatter(group2_x, group2_y, c='#2E7DCC', marker='s',
s=60, label='Gruppe B (dichter Cluster)')
ax.scatter(group3_x, group3_y, c='#3498db', marker='^',
s=60, label='Gruppe C (weit verteilter Cluster)')
ax.set_title('Vergleich von Streudiagrammen mit mehreren Gruppen')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.legend()
ax.grid(True, alpha=0.2)
plt.show()
Beispiel 4: Streudiagramm mit Farbskala (Blasendiagramm)
Beispiel
import numpy as np
# Simulierte Daten: Bevölkerung, BIP und Region verschiedener Städte
np.random.seed(42)
n = 30
population = np.random.randint(50, 500, n) # Bevölkerung (bestimmt die Blasengröße)
gdp = np.random.randint(100, 1000, n) # BIP (bestimmt die Farbintensität)
region = np.random.choice(['Nord', 'Süd', 'Ost', 'West'], n)
x = np.random.rand(n) * 100
y = np.random.rand(n) * 100
fig, ax = plt.subplots(figsize=(9, 6), layout='constrained')
scatter = ax.scatter(x, y,
s=population, # Blasengröße = population
c=gdp, # Blasenfarbe = BIP
cmap='YlOrRd', # Gelb-Orange-Rot-Farbzuordnung
Alpha=0.7,
edgecolors='gray',
linewidth=0.5)
ax.set_title('Blasendiagramm: Stadtbevölkerung vs. BIP')
ax.set_xlabel('X-Koordinate')
ax.set_ylabel('Y-Koordinate')
# Farbleiste hinzufügen, beschriftet als BIP
cbar = fig.colorbar(scatter, ax=ax, label='BIP')
ax.grid(True, alpha=0.2)
plt.show()
Häufig gestellte Fragen
Was ist der Unterschied zwischen scatter() und plot()?
plot()Geeignet für Liniendiagramme; alle Punkte haben dieselbe Farbe und denselben Markerstil, mit hoher Rendering-Effizienz.
scatter()Geeignet für Streudiagramme; jeder Punkt kann Größe und Farbe unabhängig festlegen, aber jeder Punkt ist ein unabhängiger Artist, was es bei großen Datenmengen langsamer macht.
Wenn viele Datenpunkte vorhanden sind (Zehntausende oder mehr), priorisiere plot() mit einem angegebenen Marker, um die Leistung zu verbessern.
Was ist die Einheit des s-Parameters?
sEr repräsentiert die Fläche des Punkts (Einheit: Quadratpunkte, Punkte^2), nicht den Durchmesser.
Zum Beispiels=100unds=400, Letzterer hat die 4-fache Fläche des Ersteren, und der Durchmesser beträgt etwa das 2-Fache des Ersteren.
Andere Erweiterungen