Есть ли способ аннотировать каждую точку разброса списком строк?

Я сделал точечную диаграмму, используя variable=plt.scatter(test1,test2), где test1 и test2 — это списки, соответствующие x и y.

Есть ли способ аннотировать каждую точку списком строк или переменным цветом, который я создал?

Я обнаружил, что:

for i, txt in enumerate(variablelabel):
    variable.annotate(txt, (test1[i],test2[i]))

где variablelabel определяется как мой список строк. К сожалению, это, похоже, не аннотирует мой точечный график.

В качестве альтернативы я обнаружил, что вы можете добавить стрелки, используя этот аналогичный код:

ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
ax.set_ylim(-2,2)
plt.show()

Но это создает большие стрелки, которые мне не нужны. Мне нужны только строки из моего списка.

Извините, если я не очень ясно.


person mcstosh    schedule 05.11.2017    source источник
comment
Хакерское решение состояло бы в том, чтобы вызвать annotate и передать arrowprops=None.   -  person Johannes Wachs    schedule 05.11.2017


Ответы (1)


Вы можете аннотировать каждую точку списком строк. Используйте matplotlib.annotate. . Однако вы вызываете annotate для объекта matplotlib.collections.PathCollection (результат matplotlib.scatter) вместо matplotlib.axes.Axes.

В вашем коде:

variable = plt.scatter(test1, test2)
for i, txt in enumerate(variablelabel):
    variable.annotate(txt, (test1[i], test2[i]))

variable – это matplotlib.collections.PathCollection. Вместо этого используйте следующее:

plt.scatter(test1, test2)
for i, txt in enumerate(variablelabel):
    plt.annotate(txt, (test1[i], test2[i]))

Вы должны получить что-то вроде этого:

введите описание изображения здесь

Я надеюсь, что это поможет вам.

person Flabetvibes    schedule 05.11.2017
comment
как вы можете предотвратить перекрытие текста различных аннотаций? - person JayJona; 15.07.2021