Estou tentando fazer um gráfico de dispersão e anotar pontos de dados com números diferentes de uma lista. Então, por exemplo, eu quero plotar y
vs x
e anotar com os números correspondentes de n
.
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')
Alguma ideia?
python
matplotlib
text
scatter-plot
annotate
Labibah
fonte
fonte
Respostas:
Não conheço nenhum método de plotagem que utilize matrizes ou listas, mas você pode usar
annotate()
enquanto itera os valores emn
.Existem muitas opções de formatação para
annotate()
, consulte o site matplotlib:fonte
regplot
s sem muita interrupção também.KeyError
- então acho que umdict()
objeto é esperado? Existe alguma outra maneira de rotular os dados usandoenumerate
,annotate
e um quadro de dados pandas?for row in df.iterrows():
e acessar os valores comrow['text'], row['x-coord']
etc. Se você postar uma pergunta separada, eu darei uma olhada nela.Nas versões anteriores ao matplotlib 2.0,
ax.scatter
não é necessário plotar texto sem marcadores. Na versão 2.0, você precisaráax.scatter
definir o intervalo e os marcadores adequados para o texto.E neste link você pode encontrar um exemplo em 3d.
fonte
plt.figure(figsize=(20,10))
não estão funcionando conforme o esperado, na medida em que invocar esse código não altera o tamanho da imagem. Aguardamos a sua ajuda. Obrigado!Caso alguém esteja tentando aplicar as soluções acima em um .scatter () em vez de em um .subplot (),
Eu tentei executar o seguinte código
Porém, ocorreram erros indicando que "não é possível descompactar o objeto PathCollection não iterável", com o erro apontando especificamente para a linha de código fig, ax = plt.scatter (z, y)
Acabei por resolver o erro usando o seguinte código
Eu não esperava que houvesse uma diferença entre .scatter () e .subplot () que eu deveria saber.
fonte
Você também pode usar
pyplot.text
(veja aqui ).fonte
Python 3.6+:
fonte
Como um liner usando compreensão de lista e numpy:
[ax.annotate(x[0], (x[1], x[2])) for x in np.array([n,z,y]).T]
A configuração deve-se à resposta de Rutger.
fonte
Gostaria de acrescentar que você pode até usar setas / caixas de texto para anotar os rótulos. Aqui está o que eu quero dizer:
O que gerará o seguinte gráfico:
fonte