Как изменить оси (X, Y) на графике в модуле matplotlib python?

Иммется код, который генерирует график. Это соотношения ТОП1-10, и количество просмотров за которым они и сортировались в этот ТОП.

Какие данные на входе:

(Значения Y оси идут реверсно(с меньшего до большего, потому-что доставал их через .pop())

x = ['Top10', 'Top9', 'Top8', 'Top7', 'Top6', 'Top5', 'Top4', 'Top3', 'Top2', 'Top1']
y = [257034, 260972, 343206, 362693, 413886, 521024, 670460, 722834, 748542, 1217913]

После выполнения plt.bar(x.pop(), y.pop())(10 раз), получаю следующий график:

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

Как исправить отображения Y оси? Что за ошибка появилась 1е6 ?

Какие будут варианты решения?

P.S. Возможно ли сделать на Y оси отображения только тех чисел, которые я задаю при создание графика? То есть: 1217913, 748542 ...

UPDATE!!! Ответ от пользователя handowl

Можно использовать pandas.

import pandas as pd

df = pd.DataFrame({'positions':x, 'values':y})

ax = df.plot.bar(x='positions', y='values', rot=30)
#ax.bar_label(ax.containers[0])
#ax.get_legend().remove()

plt.ticklabel_format(style='plain', axis='y')

plt.show()

После выполнения вашего кода я получаю сделующий результат:

Результат

  1. Почему-то стали открываться 2 окна.
  2. Что это за синие продолжения на графике после ТОП5 и до ТОП1?

Код функции построения графика полностью:

https://pastebin.com/Z3JEENpW


Ответы (2 шт):

Автор решения: handowl

Можно использовать pandas.

import pandas as pd

df = pd.DataFrame({'positions':x, 'values':y})

ax = df.plot.bar(x='positions', y='values', rot=30)
#ax.bar_label(ax.containers[0])
#ax.get_legend().remove()

plt.ticklabel_format(style='plain', axis='y')

plt.show()

Кстати, зачем Вы попите? Можно вот так:

sorted_values = sorted(zip(x, y), key=lambda e: e[1], reverse=True)
x = [pair[0] for pair in sorted_values]
y = [pair[1] for pair in sorted_values]

или вот так:

x = x[::-1]
y.sort(reverse=True)
→ Ссылка
Автор решения: CrazyElf

Всё можно сделать, но в таком варианте как вы хотите цифры будут наезжать друг на друга:

import matplotlib.pylab as plt

x = ['Top10', 'Top9', 'Top8', 'Top7', 'Top6', 'Top5', 'Top4', 'Top3', 'Top2', 'Top1']
y = [257034, 260972, 343206, 362693, 413886, 521024, 670460, 722834, 748542, 1217913]

x1 = x.copy()
y1 = y.copy()
for i in range(10):
    plt.bar(x1.pop(), y1.pop());

plt.yticks(y); # выставляем только нужные нам метки на оси y
plt.ticklabel_format(style='plain', axis='y') # форматирование меток

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

→ Ссылка