Создание тепловой карты из панд 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 69

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)

enter image description here

Если вам не нужен график, скажем, и вы просто заинтересованы в добавлении цвета для представления значений в формате таблицы, вы можете использовать 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')

enter image description here

есть еще несколько деталей в это связано ответа и раздел стиль документации панды проходит через многие из вариантов в глубину.