#python #python-3.x #pandas #plotly
Вопрос:
Я вращаю фрейм данных вот так.
pvt = pd.pivot_table(df_build, values='Expense', index=['Name'], columns=['Comments', 'Venue'], aggfunc=np.sum)
pvt = pvt.fillna(0)
pvt.columns
Теперь у меня есть фрейм данных с этими столбцами.
MultiIndex([( 'Build', 'Arena'),
( 'Build', 'Stadium'),
( 'Add', 'Arena'),
( 'New', 'Stadium'),
( 'Replace', 'Arena')],
names=['Comments', 'Venue'])
Я пытаюсь отобразить эти данные в виде тепловой карты. Я бы предпочел использовать Сюжетно, но Сиборн тоже хорош. Я думал, что приведенный ниже код сработает, но это не так.
df_fin = pvt.reset_index().pivot(columns='Comments', index='Venue', values='Expense')
ax = sns.heatmap(df_fin)
ax.plot()
Может быть, должно произойти какое-то расплавление. Не уверен. Как я могу отобразить эти данные в виде тепловой карты?
Ответ №1:
- смоделировали то, что я считаю структурой вашего сводного фрейма данных
- суть состоит в том, чтобы изменить форму этого фрейма данных, чтобы сделать его совместимым с https://plotly.com/python/heatmaps/#heatmap-with-plotlyexpress-and-pximshow
stack()
ось y тепловой карты- убедитесь, что индекс находится только на одном уровне (
droplevel()
) - сгенерировать рисунок
import pandas as pd
import numpy as np
import plotly.express as px
# build df that matches pivoted df
df = pd.DataFrame(
index=pd.MultiIndex.from_arrays(
[
["Build", "Build", "Add", "New", "Replace"],
["Arena", "Stadium", "Arena", "Stadium", "Arena"],
],
names=["Comments", "Venue"],
),
data = np.random.randint(1,5,5)
).T
# now restructure it for plotly
dfp = df.stack("Venue").droplevel(0,0)
# finally a simple plotly figure...
px.imshow(dfp.values, x=dfp.columns, y=dfp.index)
Комментарии:
1. Работает отлично! Спасибо за помощь здесь!!