Создание тепловой карты из панд DataFrame
У меня есть фрейм данных, созданный из пакета панд Python. Как я могу создать тепловую карту с помощью DataFrame из пакета pandas.
import numpy as np
from pandas import *
Index= ['aaa','bbb','ccc','ddd','eee']
Cols = ['A', 'B', 'C','D']
df = DataFrame(abs(np.random.randn(5, 4)), index= Index, columns=Cols)
>>> df
A B C D
aaa 2.431645 1.248688 0.267648 0.613826
bbb 0.809296 1.671020 1.564420 0.347662
ccc 1.501939 1.126518 0.702019 1.596048
ddd 0.137160 0.147368 1.504663 0.202822
eee 0.134540 3.708104 0.309097 1.641090
>>>
4 ответа:
вы хотите
matplotlib.pcolor
:import numpy as np from pandas import DataFrame import matplotlib.pyplot as plt Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee'] Cols = ['A', 'B', 'C', 'D'] df = DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols) plt.pcolor(df) plt.yticks(np.arange(0.5, len(df.index), 1), df.index) plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns) plt.show()
для людей, которые смотрят на это сегодня, я бы рекомендовал Seaborn
heatmap()
как документально здесь.приведенный выше пример будет выполнен следующим образом:
import numpy as np from pandas import DataFrame import seaborn as sns %matplotlib inline Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee'] Cols = ['A', 'B', 'C', 'D'] df = DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols) sns.heatmap(df, annot=True)
здесь
%matplotlib
это магическая функция IPython для тех, кто незнаком.
полезное
sns.heatmap
api - это здесь. Проверьте параметры, их очень много. Пример:import seaborn as sns %matplotlib inline idx= ['aaa','bbb','ccc','ddd','eee'] cols = list('ABCD') df = DataFrame(abs(np.random.randn(5,4)), index=idx, columns=cols) # _r reverses the normal order of the color map 'RdYlGn' sns.heatmap(df, cmap='RdYlGn_r', linewidths=0.5, annot=True)
Если вам не нужен график, скажем, и вы просто заинтересованы в добавлении цвета для представления значений в формате таблицы, вы можете использовать
style.background_gradient()
метод фрейма данных pandas. Этот метод окрашивает таблицу HTML, которая отображается при просмотре фреймов данных pandas, например, в ноутбуке JupyterLab, и результат похож на использование "условного форматирования"в программном обеспечении для электронных таблиц:import numpy as np import pandas as pd index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee'] cols = ['A', 'B', 'C', 'D'] df = pd.DataFrame(abs(np.random.randn(5, 4)), index=index, columns=cols) df.style.background_gradient(cmap='summer')
есть еще несколько деталей в это связано ответа и раздел стиль документации панды проходит через многие из вариантов в глубину.