Weil andere Antworten hier behaupten, dass s
den Bereich der Markierung bezeichnet, füge ich diese Antwort hinzu, um klarzustellen, dass dies nicht unbedingt der Fall ist.
Größe in Punkten^2
Das Argument s
en plt.scatter
bezeichnet die markersize**2
. In der Dokumentation heißt es
s
Skalar oder array_like, Form (n, ), optional
Größe in Punkten^2. Standardwert 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 sie dem s
Argument.
Die Beziehung zwischen der Markergröße eines Liniendiagramms und dem Argument der Streuungsgröße ist also quadratisch. Um eine Streuungsmarkierung mit der gleichen Größe wie eine Plotmarkierung der Größe 10 Punkte zu erzeugen, würden Sie also 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 zum "Gebiet"
Warum also sprechen andere Antworten und sogar die Dokumentation von "Gebiet", wenn es um die s
Parameter?
Die Einheiten der Punkte**2 sind natürlich Flächeneinheiten.
- Für den Sonderfall eines quadratischen Markers,
marker="s"
ist der Bereich der Markierung tatsächlich direkt der Wert der s
Parameter.
- Für einen Kreis ist die Fläche des Kreises
area = pi/4*s
.
- Bei anderen Markern besteht möglicherweise nicht einmal ein offensichtlicher Bezug zum Bereich des Markers.
In allen Fällen ist die Fläche der Markierung jedoch proportional zur s
Parameter . Dies ist der Grund dafür, dass man es "Gebiet" nennt, obwohl es in den meisten Fällen nicht wirklich eines ist.
Die Angabe der Größe der Streuungsmarker in Form einer Größe, die proportional zur Fläche des Markers ist, ist insofern sinnvoll, als beim Vergleich verschiedener Flecken die Fläche des Markers wahrgenommen wird und nicht seine Seitenlänge oder sein Durchmesser. D.h. eine Verdopplung der zugrundeliegenden Größe sollte die Fläche der Markierung verdoppeln.
Was sind Punkte?
Bisher wurde die Frage, was die Größe einer Streumarke bedeutet, in Punkteinheiten beantwortet. Punkte werden häufig in der Typografie verwendet, wo Schriftarten in Punkten angegeben werden. Auch Linienbreiten werden oft in Punkten angegeben. Die Standardgröße von Punkten in Matplotlib ist 72 Punkte pro Zoll (ppi) - 1 Punkt ist also 1/72 Zoll.
Es könnte nützlich sein, Größen in Pixeln statt in Punkten angeben zu können. Wenn die Abbildung ebenfalls 72 dpi hat, ist ein Punkt ein Pixel. Wenn die dpi der Abbildung anders ist (Matplotlib-Standard ist fig.dpi=100
),
1 point == fig.dpi/72. pixels
Während die Größe der Streuungsmarkierung in Punkten also für verschiedene Abbildungen in dpi unterschiedlich aussehen würde, könnte man eine 10 x 10 Pixel^2 große Markierung erstellen, die immer die gleiche Anzahl von Pixeln abdeckt:
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, prüfen Sie diese Antwort .