Matplotlib показывает ошибку при попытке использовать метод annotate ()? - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь построить представление по почте (список vbyp), используя matplotlib.plt () и используя список имен для добавления текста в каждой точке.Но функция аннотирования продолжает показывать ошибку:

x, y = xytext
TypeError: 'float' object is not iterable

Чтобы исправить это, я использовал метод range(), но он не исправляет его.

import matplotlib.pyplot as plt

names = ['S','Deuk','Cip','Pubt','Adoct','Vsa','Rener',
'Gols','OYO','Qum','Sre','Mey','Micft',
'Nia','Tco','Texments','Fidty','Jrgan','Adoch','MyKa','Dw','Ba','HL','Nx','Towerch','Uer']
posts = [6,3,4,4,6,3,3,8,7,2,15,4,5,5,2,2,2,5,3,2,2,3,4,1,1,1]
views =[554,1272,257,197,545,170,162,18465,419,107,931,1140,438,15626,72,104,219,336,217,1527,278,122,252,56,62,62]
vbyp = []
for i in range(len(posts)):
    vbyp.append(views[i]/posts[i])
plt.plot(vbyp)
for i in range(len(vbyp)):
    plt.annotate(names[i],vbyp[i])
plt.show()

Без аннотации Iполучить изображение вроде: enter image description here

Но я хочу что-то вроде этого: enter image description here

1 Ответ

0 голосов
/ 18 сентября 2018

Есть две возможности связать ваши имена с соответствующими значениями.Вам придется выбирать для себя, что вам больше нравится.

Первое: правильно использовать свой метод, который дает не очень хороший сюжет.В annotate вам нужно указать строку names[i] и координату (x, y), для которой вы только что указали одно число.

fig = plt.figure(figsize=(9,5))    

# Your code here
for i in range(len(vbyp)):
    plt.annotate(names[i],(i, vbyp[i]))

Выход

enter image description here

Второе: использование имен в качестве меток x-tick, что создает намного лучший и читаемый график.

plt.xticks(range(25), names, rotation=45)

Выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...