154 votes

Création d'une carte thermique à partir d'un DataFrame pandas

J'ai un cadre de données généré par le paquet Pandas de Python. Comment puis-je générer une carte thermique en utilisant le DataFrame du paquet 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
>>>

240voto

Brideau Points 189

Pour les personnes qui envisagent de le faire aujourd'hui, je recommanderais le Seaborn. heatmap() comme documenté aquí .

L'exemple ci-dessus serait réalisé comme suit :

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 est une fonction magique d'IPython pour ceux qui ne sont pas familiers.

140voto

joelostblom Points 7189

Si vous n'avez pas besoin d'un tracé à proprement parler et que vous souhaitez simplement ajouter de la couleur pour représenter les valeurs dans un format de tableau, vous pouvez utiliser la fonction style.background_gradient() de la trame de données pandas. Cette méthode permet de colorer le tableau HTML qui s'affiche lors de l'affichage des cadres de données pandas dans le carnet de notes JupyterLab, par exemple, et le résultat est similaire à l'utilisation du "formatage conditionnel" dans un tableur :

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='Blues')

enter image description here

Pour une utilisation détaillée, veuillez consulter la réponse plus élaborée J'ai fourni sur le même sujet précédemment et le section sur le style de la documentation de pandas .

101voto

chthonicdaemon Points 3399

Vous voulez matplotlib.pcolor :

import numpy as np 
from pandas import DataFrame
import matplotlib.pyplot as plt

index = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
columns = ['A', 'B', 'C', 'D']
df = DataFrame(abs(np.random.randn(5, 4)), index=index, columns=columns)

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()

Cela donne :

Output sample

22voto

Brad Solomon Points 11873

Utile sns.heatmap api est aquí . Vérifiez les paramètres, il y en a un bon nombre. Exemple :

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

6voto

Nick Fernandez Points 150

Si vous souhaitez obtenir une carte thermique interactive à partir d'un DataFrame Pandas et que vous utilisez un carnet Jupyter, vous pouvez essayer le Widget interactif. Clustergrammer-Widget Voir le carnet de notes interactif sur NBViewer aquí documentation aquí

enter image description here

Et pour les plus grands ensembles de données, vous pouvez essayer la version en cours de développement. Clustergrammer2 Widget WebGL (exemple de carnet de notes aquí )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X