Im Pyplot-Dokument für das Streudiagramm:
matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
faceted=True, verts=None, hold=None, **kwargs)
Die Markergröße
s: Größe in Punkten ^ 2. Es ist ein Skalar oder ein Array mit der gleichen Länge wie x und y.
Was für eine Einheit ist das points^2
? Was bedeutet das? Bedeutet s=100
das 10 pixel x 10 pixel
?
Grundsätzlich versuche ich, Streudiagramme mit unterschiedlichen Markergrößen zu erstellen, und ich möchte herausfinden, was die s
Zahl bedeutet.
s=20
die Markierungsgröße entspricht der einesfontsize=20
Buchstabens?fontsize=20
Buchstabe ist 20 Punkte hoch (oder was auch immer das Referenzzeichen in der Schrift ist, ist 20 Punkte groß).matplotlib.pyplot.plot()
hatms
parameter (markersize
) ein Äquivalent fürmatplotlib.pyplot.scatter()
parameters
(size
). Nur eine Erinnerung ..Antworten:
Dies kann eine etwas verwirrende Art der Definition der Größe sein, aber Sie geben im Grunde den Bereich des Markers an. Dies bedeutet, um die Breite (oder Höhe) des Markers zu verdoppeln, müssen Sie um den
s
Faktor 4 erhöhen. [Weil A = W H => (2W) (2H) = 4A]Es gibt jedoch einen Grund, warum die Größe von Markern auf diese Weise definiert wird. Aufgrund der Skalierung der Fläche als Quadrat der Breite scheint das Verdoppeln der Breite die Größe tatsächlich um mehr als den Faktor 2 zu erhöhen (tatsächlich erhöht sie sie um den Faktor 4). Um dies zu sehen, betrachten Sie die folgenden zwei Beispiele und die Ausgabe, die sie erzeugen.
gibt
Beachten Sie, wie schnell die Größe zunimmt. Wenn wir stattdessen haben
gibt
Jetzt nimmt die scheinbare Größe der Marker auf intuitive Weise ungefähr linear zu.
Die genaue Bedeutung eines Punkts ist für Plotzwecke ziemlich willkürlich. Sie können einfach alle Größen nach einer Konstanten skalieren, bis sie vernünftig aussehen.
Hoffe das hilft!
Bearbeiten: (Als Antwort auf einen Kommentar von @Emma)
Es ist wahrscheinlich eine verwirrende Formulierung von meiner Seite. Die Frage nach der Verdoppelung der Breite eines Kreises, sodass im ersten Bild für jeden Kreis (wenn wir uns von links nach rechts bewegen) die Breite doppelt so groß ist wie die vorherige. Für den Bereich ist dies also ein Exponential mit Basis 4. Ähnlich das zweite Beispiel Jeder Kreis hat doppelte Fläche als die letzte, was ein Exponential mit der Basis 2 ergibt.
Es ist jedoch das zweite Beispiel (wo wir den Bereich skalieren), dass der Verdopplungsbereich den Kreis für das Auge doppelt so groß erscheinen lässt. Wenn also ein Kreis
n
größer erscheinen soll, vergrößern wir die Fläche um einen Faktor,n
nicht um den Radius, sodass die scheinbare Größe linear mit der Fläche skaliert.Bearbeiten , um den Kommentar von @TomaszGandor zu visualisieren:
So sieht es für verschiedene Funktionen der Markergröße aus:
quelle
s
Wert entsprechend der Größe des Figurenfensters zu ändern ? Ich meine, wenn wir die Figurenfenster maximieren, hätte ich gerne größere Markierungen.4 ** n
und sein2 ** n
, sondernn ** 4
undn ** 2
. Mit2 ** n
dem zweiten Diagramm wird nicht linear in Bezug auf den Kreisdurchmesser skaliert. Es geht immer noch zu schnell (nur nicht so viel übertrieben).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
inplt.scatter
bezeichnet diemarkersize**2
. Wie die Dokumentation sagtDies 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)
.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.
marker="s"
die Fläche des Markers tatsächlich direkt der Wert vons
Parameters.area = pi/4*s
.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
),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:
Wenn Sie an einer Streuung in Dateneinheiten interessiert sind, überprüfen Sie diese Antwort .
quelle
Sie können Markierungsgröße verwenden , um die Größe des Kreises in der Plotmethode anzugeben
Von hier aus
quelle
Es ist der Bereich des Markers. Ich meine, wenn Sie haben
s1 = 1000
und danns2 = 4000
ist die Beziehung zwischen dem Radius jedes Kreises :r_s2 = 2 * r_s1
. Siehe folgendes Diagramm:Ich hatte den gleichen Zweifel, als ich den Beitrag sah, also habe ich dieses Beispiel gemacht und dann ein Lineal auf dem Bildschirm verwendet, um die Radien zu messen.
quelle
Ich habe auch versucht, "Scatter" zunächst für diesen Zweck zu verwenden. Nach einiger Zeitverschwendung habe ich mich für die folgende Lösung entschieden.
Dies basiert auf einer Antwort auf diese Frage
quelle
Wenn die Größe der Kreise dem Quadrat des Parameters in entspricht
s=parameter
, weisen Sie jedem Element, das Sie an Ihr Größenarray anhängen, eine Quadratwurzel zu:s=[1, 1.414, 1.73, 2.0, 2.24]
Wenn diese Werte verwendet und zurückgegeben werden, erhöht sich ihre relative Größe die Quadratwurzel der quadratischen Progression, die eine lineare Progression zurückgibt.Wenn ich jedes Quadrat so platzieren würde, wie es in der Handlung ausgegeben wird :
output=[1, 2, 3, 4, 5]
. Versuchen Sie, die Liste zu interpretieren:s=[numpy.sqrt(i) for i in s]
quelle
i in output
nicht sein?