Я бы хотел использовать seaborn (было бы неплохо использовать matplotlib) для создания барплота из моего DataFrame.
Но, судя по документам, функция barplot ожидает списокзначения, которые выглядят следующим образом:
Затем вы можете построить его с помощью:
tips = sns.load_dataset("tips")
sns.barplot(x="day", y="total_bill", hue="sex", data=tips)
Мои данные выглядят по-другому, я создал multi_index в столбцах,Поскольку я не могу опубликовать свои исходные данные, вот макет того, как он будет выглядеть для набора данных подсказок:
А вот кодэто создает вышеупомянутый фрейм данных:
index_tuples=[]
for sex in ["Male", "Female"]:
for day in ["Sun", "Mon"]:
index_tuples.append([sex, day])
index = pd.MultiIndex.from_tuples(index_tuples, names=["sex", "day"])
dataframe = pd.DataFrame(columns = index)
total_bill = {"Male":{"Sun":5, "Mon":3},"Female":{"Sun":10, "Mon":5}}
dataframe = dataframe.append(pd.DataFrame.from_dict(total_bill).unstack().rename('total_bill'))
Теперь мой вопрос: как я могу создать барплот из этого мультииндекса?Решение должно правильно сгруппировать столбцы, как и аргумент hue
для seaborn.Простое получение данных в виде массива и передача их в matplotlib не работает.
Мое решение до сих пор заключается в преобразовании мультииндексов в столбцы путем многократного размещения DataFrame.Например:
stacked_frame = dataframe.stack().stack().to_frame().reset_index()
Это приводит к макету данных, ожидаемому seaborn:
И вы можете построить его с помощью
sns.barplot(x="day", y=0, hue="sex", data=stacked_frame)
plt.show()
Можно ли создать барплот непосредственно из мультииндекса?