Построение гистограммы в python из экселя

Построена таблица в экселе. Нужно сделать гистограмму (столбцы) с последним и первым столбцом. Получилось сделать только линейный график. Знаю, что есть plt.bar(), однако при его применении выходит ошибка.

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel(r'C:\Users\User\Desktop\sr5.1.xlsx')
df = pd.DataFrame(data, columns=['Unnamed: 4', 'Unnamed: 1'])
x = df[2:9]

x.plot(x='Unnamed: 1', y='Unnamed: 4')
plt.grid('True')
plt.show()

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

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

Возможно, я не правильно использую plt.bar(), но:

x = df[2:9]
plt.bar(x='Unnamed: 1', y='Unnamed: 4', alpha=0.5, height=0.8, width=0.4)
plt.grid('True')
plt.show()

Ошибка: raise munits.ConversionError('Failed to convert value(s) to axis ' matplotlib.units.ConversionError: Failed to convert value(s) to axis units: 'Unnamed: 4'


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

Автор решения: CrazyElf
plt.bar(x='Unnamed: 1', y='Unnamed: 4', alpha=0.5, height=0.8, width=0.4)

Ну как бы тут вообще датафрейм у вас никак не участвует, matplotlib просто не понимает, где брать данные и пытается их брать из предоставленных вами строк, ну и не может он их нормально отрисовать. Ну то есть надо было делать так:

plt.bar(x=x['Unnamed: 1'], y=x['Unnamed: 4'], alpha=0.5, height=0.8, width=0.4)

Но на самом деле так тоже не получится из-за того, что по оси x у вас строки (или по какой-то другой причине, мне лень разбираться), в общем, лучше просто укажите тип графика в той команде, которой вы выше рисовали, так можно:

x.plot(x='Unnamed: 1', y='Unnamed: 4', kind='bar')

Но вообще, если хотите красивых графиков, лучше изучите seaborn:

import seaborn as sns
sns.barplot(x='Unnamed: 1', y='Unnamed: 4', data=x, alpha=0.5)
→ Ссылка