matplotlib scatter plot with different text at each data point

99封情书 提交于 2019-11-25 18:47:03
Rutger Kassies

I'm not aware of any plotting method which takes arrays or lists but you could use annotate() while iterating over the values in 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])) 

There are a lot of formatting options for annotate(), see the matplotlib website:

rafaelvalle

In version's earlier than matplotlib 2.0, ax.scatter is not necessary to plot text without markers. In version 2.0 you'll need ax.scatter to set the proper range and markers for text.

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])) 

And in this link you can find an example in 3d.

In case anyone is trying to apply the above solutions to a .scatter() instead of a .subplot(),

I tried running the following code

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])) 

But ran into errors stating "cannot unpack non-iterable PathCollection object", with the error specifically pointing at codeline fig, ax = plt.scatter(z, y)

I eventually solved the error using the following code

plt.scatter(z, y)  for i, txt in enumerate(n):     plt.annotate(txt, (z[i], y[i])) 

I didn't expect there to be a difference between .scatter() and .subplot() I should have known better.

You may also use pyplot.text (see here).

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) 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!