Weil andere Antworten hier das behaupten s
den Bereich des Markers bezeichnen, füge ich diese Antwort hinzu, um zu verdeutlichen, dass dies nicht unbedingt der Fall ist.
Größe in Punkten ^ 2
Das Argument s
in plt.scatter
bezeichnet die markersize**2
. Wie die Dokumentation sagt
s
: skalar oder array_like, Form (n,), optionale
Größe in Punkten ^ 2. Standard ist rcParams ['lines.markersize'] ** 2.
Dies kann wörtlich genommen werden. Um einen Marker zu erhalten, der x Punkte groß ist, müssen Sie diese Zahl quadrieren und dem s
Argument geben.
Die Beziehung zwischen der Markierungsgröße eines Liniendiagramms und dem Streugrößenargument ist also das Quadrat. Um einen Streumarker mit der gleichen Größe wie einen Plotmarker mit einer Größe von 10 Punkten zu erzeugen, würden Sie daher aufrufen scatter( .., s=100)
.
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([0],[0], marker="o", markersize=10)
ax.plot([0.07,0.93],[0,0], linewidth=10)
ax.scatter([1],[0], s=100)
ax.plot([0],[1], marker="o", markersize=22)
ax.plot([0.14,0.86],[1,1], linewidth=22)
ax.scatter([1],[1], s=22**2)
plt.show()
Verbindung zu "Bereich"
Warum sprechen andere Antworten und sogar die Dokumentation von "Bereich", wenn es um den s
Parameter geht?
Natürlich sind die Punkteinheiten ** 2 Flächeneinheiten.
- Für den Sonderfall eines quadratischen Markers ist
marker="s"
die Fläche des Markers tatsächlich direkt der Wert vons
Parameters.
- Für einen Kreis ist die Fläche des Kreises
area = pi/4*s
.
- Bei anderen Markern besteht möglicherweise nicht einmal eine offensichtliche Beziehung zum Bereich des Markers.
In allen Fällen ist die Fläche des Markers jedoch proportional zum s
Parameter . Dies ist die Motivation, es "Gebiet" zu nennen, obwohl es in den meisten Fällen nicht wirklich so ist.
Die Angabe der Größe der Streumarker in Bezug auf eine Menge, die proportional zur Fläche des Markers ist, ist insofern sinnvoll, als es die Fläche des Markers ist, die beim Vergleich verschiedener Flecken und nicht deren Seitenlänge oder Durchmesser wahrgenommen wird. Das Verdoppeln der zugrunde liegenden Menge sollte die Fläche des Markers verdoppeln.
Was sind Punkte?
Bisher wird die Antwort auf die Bedeutung eines Streumarkers in Punkteinheiten angegeben. Punkte werden häufig in der Typografie verwendet, wobei Schriftarten in Punkten angegeben werden. Auch Linienbreiten werden häufig in Punkten angegeben. Die Standardgröße der Punkte in Matplotlib beträgt 72 Punkte pro Zoll (ppi) - 1 Punkt entspricht somit 1/72 Zoll.
Es kann nützlich sein, Größen anstelle von Punkten in Pixel angeben zu können. Wenn die Zahl dpi ebenfalls 72 ist, ist ein Punkt ein Pixel. Wenn die Zahl dpi unterschiedlich ist (Standard ist matplotlib fig.dpi=100
),
1 point == fig.dpi/72. pixels
Während die Größe des Streumarkers in Punkten für unterschiedliche dpi-Zahlen unterschiedlich aussehen würde, könnte man einen 10 x 10 Pixel ^ 2-Marker erzeugen, bei dem immer die gleiche Anzahl von Pixeln abgedeckt wäre:
import matplotlib.pyplot as plt
for dpi in [72,100,144]:
fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
ax.set_title("fig.dpi={}".format(dpi))
ax.set_ylim(-3,3)
ax.set_xlim(-2,2)
ax.scatter([0],[1], s=10**2,
marker="s", linewidth=0, label="100 points^2")
ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
marker="s", linewidth=0, label="100 pixels^2")
ax.legend(loc=8,framealpha=1, fontsize=8)
fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
plt.show()
Wenn Sie an einer Streuung in Dateneinheiten interessiert sind, überprüfen Sie diese Antwort .