Scatter plot with different text at each data point
Точечная диаграмма с разным текстом в каждой точке данных
Я пытаюсь создать точечную диаграмму и пометить точки данных разными номерами из списка. Итак, например, я хочу построить график y vs x и пометить соответствующими числами из n.
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199] x = [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')
Есть идеи?
Переведено автоматически
Ответ 1
Я не знаю ни одного метода построения графика, который использует массивы или списки, но вы могли бы использовать annotate() при переборе значений в n.
import matplotlib.pyplot as plt x = [0.15, 0.3, 0.45, 0.6, 0.75] y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199] n = [58, 651, 393, 203, 123]
fig, ax = plt.subplots() ax.scatter(x, y)
for i, txt inenumerate(n): ax.annotate(txt, (x[i], y[i]))
Для annotate() существует множество вариантов форматирования, смотрите веб-сайт matplotlib:
Ответ 2
На случай, если кто-то пытается применить вышеуказанные решения к .scatter() вместо .subplot(),
Я попытался запустить следующий код
import matplotlib.pyplot as plt x = [0.15, 0.3, 0.45, 0.6, 0.75] y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199] n = [58, 651, 393, 203, 123]
fig, ax = plt.scatter(x, y)
for i, txt inenumerate(n): ax.annotate(txt, (x[i], y[i]))
Но столкнулся с ошибками, указывающими "не удается распаковать не итерируемый объект PathCollection", причем ошибка конкретно указывает на кодовую строку fig, ax = plt.scatter(x, y)
В конечном итоге я решил ошибку, используя следующий код
import matplotlib.pyplot as plt plt.scatter(x, y)
for i, txt inenumerate(n): plt.annotate(txt, (x[i], y[i]))
Я не ожидал, что между .scatter() и .subplot() будет разница Мне следовало знать лучше.
Ответ 3
В версиях, более ранних, чем matplotlib 2.0, ax.scatter нет необходимости выводить текст без маркеров. В версии 2.0 вам нужно будет ax.scatter установить правильный диапазон и маркеры для текста.
import matplotlib.pyplot as plt 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 inenumerate(n): ax.annotate(txt, (z[i], y[i]))
Вы также можете использовать pyplot.text (см. Здесь).
defplot_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()