No documento pyplot para plotagem de dispersão:
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)
O tamanho do marcador
s: tamanho em pontos ^ 2. É um escalar ou uma matriz do mesmo comprimento que x e y.
Que tipo de unidade é points^2
? O que isso significa? Será que s=100
quer dizer 10 pixel x 10 pixel
?
Basicamente, estou tentando fazer gráficos de dispersão com tamanhos de marcador diferentes e quero descobrir o que esse s
número significa.
matplotlib
marker
scatter
LWZ
fonte
fonte
s=20
significa que o tamanho do marcador é igual ao de umafontsize=20
letra?fontsize=20
letra terá 20 pts de altura (ou o que o caractere de referência na fonte tiver 20 pts).matplotlib.pyplot.plot()
possuims
parameter (markersize
) um equivalente paramatplotlib.pyplot.scatter()
parameters
(size
). Apenas um lembrete ..Respostas:
Essa pode ser uma maneira um pouco confusa de definir o tamanho, mas você está basicamente especificando a área do marcador. Isso significa que, para dobrar a largura (ou altura) do marcador, é necessário aumentar
s
um fator de 4. [porque A = W H => (2W) (2H) = 4A]Há uma razão, no entanto, que o tamanho dos marcadores é definido dessa maneira. Devido ao dimensionamento da área como o quadrado da largura, dobrar a largura na verdade parece aumentar o tamanho em mais de um fator 2 (na verdade, aumenta em um fator de 4). Para ver isso, considere os dois exemplos a seguir e a saída que eles produzem.
dá
Observe como o tamanho aumenta muito rapidamente. Se, em vez disso, temos
dá
Agora, o tamanho aparente dos marcadores aumenta aproximadamente linearmente de maneira intuitiva.
Quanto ao significado exato do que é um "ponto", é bastante arbitrário para fins de plotagem, você pode apenas dimensionar todos os seus tamanhos por uma constante até que pareçam razoáveis.
Espero que isto ajude!
Edit: (Em resposta ao comentário de @Emma)
Provavelmente é uma redação confusa da minha parte. A pergunta feita sobre dobrar a largura de um círculo, portanto, na primeira figura para cada círculo (à medida que avançamos da esquerda para a direita), sua largura é o dobro da anterior; portanto, para a área, é um exponencial com a base 4. Da mesma forma, o segundo exemplo cada círculo tem área duas vezes maior que a exponencial com base 2.
No entanto, é o segundo exemplo (onde estamos escalando a área) que a área duplicada parece fazer o círculo duas vezes maior do que o olho. Assim, se quisermos que um círculo apareça um fator
n
maior, aumentaremos a área por um fator en
não o raio, de modo que o tamanho aparente seja dimensionado linearmente com a área.Edite para visualizar o comentário de @TomaszGandor:
É assim que parece para diferentes funções do tamanho do marcador:
fonte
s
valor de acordo com o tamanho da janela da figura? Quero dizer, se maximizarmos as janelas de figuras, eu gostaria de ter marcas de tamanho maiores.4 ** n
e2 ** n
, masn ** 4
en ** 2
. Com2 ** n
o segundo gráfico, não é dimensionado linearmente em termos de diâmetro do círculo. Ainda vai rápido demais (mas não muito por cima).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
emplt.scatter
denota omarkersize**2
. Como a documentação dizIsso 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)
.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.
marker="s"
, a área do marcador é de fato diretamente o valor dos
parâmetro.area = pi/4*s
.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
),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:
Se você estiver interessado em uma dispersão nas unidades de dados, verifique esta resposta .
fonte
Você pode usar markersize para especificar o tamanho do círculo no método de plotagem
A partir daqui
fonte
É a área do marcador. Quero dizer, se você tem
s1 = 1000
e, em seguidas2 = 4000
, a relação entre o raio de cada círculo é:r_s2 = 2 * r_s1
. Veja o seguinte gráfico:Eu tinha a mesma dúvida quando vi o post, então fiz este exemplo e usei uma régua na tela para medir os raios.
fonte
Também tentei usar 'scatter' inicialmente para esse fim. Depois de muito tempo perdido - decidi pela seguinte solução.
Isso é baseado em uma resposta a esta pergunta
fonte
Se o tamanho dos círculos corresponder ao quadrado do parâmetro em
s=parameter
, atribua uma raiz quadrada a cada elemento que você anexa à sua matriz de tamanho, assim: des=[1, 1.414, 1.73, 2.0, 2.24]
modo que, quando ele pega esses valores e os retorna, seu aumento relativo de tamanho será a raiz quadrada da progressão ao quadrado, que retorna uma progressão linear.Se eu fosse para quadrados cada um como ele fica de saída até ao terreno:
output=[1, 2, 3, 4, 5]
. Tente a interpretação da lista:s=[numpy.sqrt(i) for i in s]
fonte
i in output
não deveria?