Debido a que otras respuestas aquí afirman que s
denota el área del marcador, estoy agregando esta respuesta para aclarar que este no es necesariamente el caso.
Tamaño en puntos ^ 2
El argumento s
en plt.scatter
denota el markersize**2
. Como dice la documentación
s
: escalar o array_like, forma (n,),
tamaño opcional en puntos ^ 2. El valor predeterminado es rcParams ['lines.markersize'] ** 2.
Esto se puede tomar literalmente. Para obtener un marcador que sea x puntos grandes, debe cuadrar ese número y asignarlo al s
argumento.
Entonces, la relación entre el tamaño del marcador de un diagrama lineal y el argumento del tamaño de dispersión es el cuadrado. Para producir un marcador de dispersión del mismo tamaño que un marcador de trama de 10 puntos, debería llamar 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()
Conexión a "área"
Entonces, ¿por qué otras respuestas e incluso la documentación hablan sobre "área" cuando se trata del s
parámetro?
Por supuesto, las unidades de puntos ** 2 son unidades de área.
- Para el caso especial de un marcador cuadrado
marker="s"
, el área del marcador es directamente el valor del s
parámetro.
- Para un círculo, el área del círculo es
area = pi/4*s
.
- Para otros marcadores, puede que ni siquiera haya una relación obvia con el área del marcador.
En todos los casos, sin embargo, el área del marcador es proporcional al s
parámetro . Esta es la motivación para llamarlo "área", aunque en la mayoría de los casos no lo es realmente.
Especificar el tamaño de los marcadores de dispersión en términos de cierta cantidad que es proporcional al área del marcador tiene sentido, ya que es el área del marcador que se percibe al comparar diferentes parches en lugar de su longitud lateral o diámetro. Es decir, duplicar la cantidad subyacente debería duplicar el área del marcador.
¿Qué son los puntos?
Hasta ahora, la respuesta a lo que significa el tamaño de un marcador de dispersión se da en unidades de puntos. Los puntos se usan a menudo en tipografía, donde las fuentes se especifican en puntos. También los anchos de línea a menudo se especifican en puntos. El tamaño estándar de los puntos en matplotlib es 72 puntos por pulgada (ppi); por lo tanto, 1 punto es 1/72 pulgadas.
Puede ser útil poder especificar tamaños en píxeles en lugar de puntos. Si la cifra de dpi también es 72, un punto es un píxel. Si la cifra de dpi es diferente (el valor predeterminado de matplotlib es fig.dpi=100
),
1 point == fig.dpi/72. pixels
Si bien el tamaño del marcador de dispersión en puntos se vería diferente para diferentes ppp de figura, se podría producir un marcador ^ 2 de 10 por 10 píxeles, que siempre tendría el mismo número de píxeles cubiertos:
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 está interesado en una dispersión en unidades de datos, marque esta respuesta .