Parce que d'autres réponses ici prétendent que cela s
dénote la zone du marqueur, j'ajoute cette réponse pour clarifier que ce n'est pas nécessairement le cas.
Taille en points ^ 2
L'argument s
en plt.scatter
indique le markersize**2
. Comme le dit la documentation
s
: scalaire ou array_like, forme (n,),
taille facultative en points ^ 2. La valeur par défaut est rcParams ['lines.markersize'] ** 2.
Cela peut être pris à la lettre. Pour obtenir un marqueur de x points, vous devez mettre ce nombre au carré et le donner à l' s
argument.
Ainsi, la relation entre la taille de marqueur d'un tracé de ligne et l'argument de la taille de dispersion est le carré. Afin de produire un marqueur de dispersion de la même taille qu'un marqueur de tracé de taille 10 points, vous devez donc appeler 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()
Connexion à "zone"
Alors pourquoi les autres réponses et même la documentation parlent de "zone" en ce qui concerne le s
paramètre?
Bien sûr, les unités de points ** 2 sont des unités de surface.
- Pour le cas particulier d'un marqueur carré
marker="s"
, la surface du marqueur est en effet directement la valeur du s
paramètre.
- Pour un cercle, l'aire du cercle est
area = pi/4*s
.
- Pour d'autres marqueurs, il peut même ne pas y avoir de relation évidente avec la zone du marqueur.
Dans tous les cas, cependant, l'aire du marqueur est proportionnelle au s
paramètre . C'est la motivation pour l'appeler "zone" même si dans la plupart des cas ce n'est pas vraiment le cas.
Spécifier la taille des marqueurs de dispersion en termes d'une certaine quantité qui est proportionnelle à la zone du marqueur a du sens dans la mesure où c'est la zone du marqueur qui est perçue lors de la comparaison de différents patchs plutôt que de sa longueur ou de son diamètre latéral. C'est-à-dire que doubler la quantité sous-jacente devrait doubler la surface du marqueur.
Quels sont les points?
Jusqu'à présent, la réponse à ce que signifie la taille d'un marqueur de dispersion est donnée en unités de points. Les points sont souvent utilisés en typographie, où les polices sont spécifiées en points. Les largeurs de ligne sont également souvent spécifiées en points. La taille standard des points dans matplotlib est de 72 points par pouce (ppp) - 1 point est donc 1/72 pouces.
Il pourrait être utile de pouvoir spécifier des tailles en pixels au lieu de points. Si le chiffre dpi est également de 72, un point est un pixel. Si le chiffre dpi est différent (la valeur par défaut de matplotlib est fig.dpi=100
),
1 point == fig.dpi/72. pixels
Alors que la taille du marqueur de dispersion en points serait donc différente pour différents ppp, on pourrait produire un marqueur de 10 x 10 pixels ^ 2, qui aurait toujours le même nombre de pixels couverts:
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()
Si vous êtes intéressé par une dispersion dans les unités de données, cochez cette réponse .