Matplotlib-Funktion scatter()


Matplotlib 参考文档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

ParameterTypeBeschreibung
x, yarray-ähnlichDie x- und y-Koordinaten der Datenpunkte (erforderlich)
sfloat oder array-ähnlichDie Größe der Punkte; kann ein Skalar (alle Punkte gleich) oder ein Array (jeder Punkt eine andere Größe) sein
cFarbe oder array-ähnlichDie Farbe der Punkte; kann eine feste Farbe oder ein numerisches Array sein (wird mit cmap zur Farbzuordnung verwendet)
markerstrMarkerform: 'o' (Kreis), 's' (Quadrat), '^' (aufwärtsgerichtetes Dreieck), 'v' (abwärtsgerichtetes Dreieck), 'D' (Raute), '*' (Stern), '+' (Plus), 'x' (x), usw., Standard ist 'o'
cmapstr oder ColormapFarbzuordnung, verwendet, wenn c ein numerisches Array ist, z. B. 'viridis', 'plasma'
normNormalizeDie Normalisierungsmethode zur Zuordnung von Daten zu Farben
vmin, vmaxfloatDer Datenbereich für die Farbzuordnung; Punkte außerhalb des Bereichs werden abgeschnitten
Alphafloat oder array-ähnlichTransparenz, zwischen 0-1
linewidthsfloat oder array-ähnlichLinienbreite der Punktkante
edgecolorsFarbe oder array-ähnlichKantenfarbe der Punkte, 'face' verwendet die Füllfarbe, 'none' bedeutet keine Kante
labelstrLegendenbeschriftung

Der Kernvorteil von scatter() ist, dasss、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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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.


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen