J'essaie de faire un nuage de points et d'annoter des points de données avec des nombres différents d'une liste. Ainsi, par exemple, je veux tracer y vs x et annoter avec les nombres correspondants 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')
Des idées?
Je ne connais aucune méthode de traçage qui prenne des tableaux ou des listes, mais vous pouvez utiliser annotate()
en itérant les valeurs dans 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]
fig, ax = plt.subplots()
ax.scatter(z, y)
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
Il y a beaucoup d'options de formatage pour annotate()
, voir le site web matplotlib:
Dans les versions antérieures à matplotlib 2.0, ax.scatter
n'est pas nécessaire pour tracer du texte sans marqueurs. Dans la version 2.0, vous aurez besoin de ax.scatter
pour définir la plage et les marqueurs appropriés pour le texte.
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]
fig, ax = plt.subplots()
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
Et dans ce lien vous pouvez trouver un exemple en 3D.
Au cas où quelqu'un essaierait d'appliquer les solutions ci-dessus à un .scatter () au lieu d'un .subplot (),
J'ai essayé d'exécuter le code suivant
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]
fig, ax = plt.scatter(z, y)
for i, txt in enumerate(n):
ax.annotate(txt, (z[i], y[i]))
Des erreurs sont toutefois survenues, indiquant que "ne peut pas décompresser un objet PathCollection non-itérable", l’erreur désignant spécifiquement la ligne de code fig, ax = plt.scatter (z, y).
J'ai finalement résolu l'erreur en utilisant le code suivant
plt.scatter(z, y)
for i, txt in enumerate(n):
plt.annotate(txt, (z[i], y[i]))
Je ne m'attendais pas à ce qu'il y ait une différence entre .scatter () et .subplot () que j'aurais dû mieux connaître.
Vous pouvez également utiliser pyplot.text
(voir ici ).
def plot_embeddings(M_reduced, Word2Ind, words):
""" Plot in a scatterplot the embeddings of the words specified in the list "words".
Include a label next to each point.
"""
for Word in words:
x, y = M_reduced[Word2Ind[Word]]
plt.scatter(x, y, marker='x', color='red')
plt.text(x+.03, y+.03, Word, fontsize=9)
plt.show()
M_reduced_plot_test = np.array([[1, 1], [-1, -1], [1, -1], [-1, 1], [0, 0]])
Word2Ind_plot_test = {'test1': 0, 'test2': 1, 'test3': 2, 'test4': 3, 'test5': 4}
words = ['test1', 'test2', 'test3', 'test4', 'test5']
plot_embeddings(M_reduced_plot_test, Word2Ind_plot_test, words)