Como outras respostas aqui alegam que s
denota a área do marcador, estou adicionando esta resposta para esclarecer que esse não é necessariamente o caso.
Tamanho em pontos ^ 2
O argumento s
em plt.scatter
denota o markersize**2
. Como a documentação diz
s
: escalar ou array_like, forma (n),
tamanho opcional nos pontos ^ 2. O padrão é rcParams ['lines.markersize'] ** 2.
Isso pode ser tomado literalmente. Para obter um marcador com x pontos grandes, você precisa quadrá-lo e apresentá-lo ao s
argumento.
Portanto, a relação entre o tamanho do marcador de um gráfico de linha e o argumento do tamanho da dispersão é o quadrado. Para produzir um marcador de dispersão do mesmo tamanho que um marcador de plotagem de tamanho 10 pontos, você chamaria 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()
Conexão com "área"
Então, por que outras respostas e até a documentação falam sobre "área" quando se trata do s
parâmetro?
Obviamente, as unidades de pontos ** 2 são unidades de área.
- Para o caso especial de um marcador quadrado
marker="s"
, a área do marcador é de fato diretamente o valor do s
parâmetro.
- Para um círculo, a área do círculo é
area = pi/4*s
.
- Para outros marcadores, pode até não haver nenhuma relação óbvia com a área do marcador.
Em todos os casos, porém, a área do marcador é proporcional ao s
parâmetro . Essa é a motivação para chamá-la de "área", embora na maioria dos casos não seja realmente.
A especificação do tamanho dos marcadores de dispersão em termos de alguma quantidade proporcional à área do marcador faz sentido até agora, pois é a área do marcador que é percebida ao comparar diferentes amostras em vez de seu comprimento ou diâmetro lateral. Ou seja, dobrar a quantidade subjacente deve dobrar a área do marcador.
O que são pontos?
Até agora, a resposta para o significado do tamanho de um marcador de dispersão é dada em unidades de pontos. Os pontos são frequentemente usados em tipografia, onde as fontes são especificadas em pontos. As larguras de linha também são frequentemente especificadas em pontos. O tamanho padrão dos pontos no matplotlib é 72 pontos por polegada (ppi) - 1 ponto é, portanto, 1/72 polegadas.
Pode ser útil poder especificar tamanhos em pixels em vez de pontos. Se a figura dpi também for 72, um ponto é um pixel. Se a figura dpi for diferente (o padrão matplotlib é fig.dpi=100
),
1 point == fig.dpi/72. pixels
Embora o tamanho do marcador de dispersão em pontos pareça diferente para diferentes dpi de figura, pode-se produzir um marcador de 10 por 10 pixels ^ 2, que sempre terá o mesmo número de pixels cobertos:
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()
Se você estiver interessado em uma dispersão nas unidades de dados, verifique esta resposta .