J'ai un dataframe généré à partir du package Pandas de Python. Comment puis-je générer une carte thermique en utilisant DataFrame à partir du package 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
>>>
Réponses:
Vous voulez
matplotlib.pcolor
:Cela donne:
la source
pcolor
vsimshow
..pcolormesh
, qui est optimisé pour ce type de graphisme.Pour les personnes qui regardent cela aujourd'hui, je recommanderais le Seaborn
heatmap()
tel que documenté ici .L'exemple ci-dessus serait fait comme suit:
Où se
%matplotlib
trouve une fonction magique IPython pour ceux qui ne sont pas familiers.la source
import matplotlib.pyplot as plt
?import matplotlib.pyplot as plt
au lieu de%matplotlib inline
et terminez parplt.show()
pour voir réellement l'intrigue.Si vous n'avez pas besoin d'un tracé en soi, et que vous êtes simplement intéressé par l'ajout de couleur pour représenter les valeurs dans un format de tableau, vous pouvez utiliser la
style.background_gradient()
méthode du bloc de données pandas. Cette méthode colorise le tableau HTML qui est affiché lors de l'affichage des cadres de données pandas dans, par exemple, le bloc-notes JupyterLab et le résultat est similaire à l'utilisation de la "mise en forme conditionnelle" dans un tableur:Pour une utilisation détaillée, veuillez consulter la réponse plus élaborée j'ai fournie sur le même sujet précédemment et la section de style de la documentation pandas .
la source
pd.DataFrame([[1, 1], [0, 3]]).style.background_gradient(cmap='summer')
donne un tableau avec deux, chacun d'eux avec une couleur différente.axis=None
(depuis pandas 0.24.0).axis=None
parvient et, à mon avis, cela devrait faire partie de votre réponse (d'autant plus que cela ne semble pas être documenté 0 )axis=None
partie de la réponse détaillée à laquelle je renvoie ci- dessus, ainsi que quelques autres options car je suis d'accord avec vous que certaines de ces options permettent un comportement généralement souhaité. J'ai également remarqué le manque de documentation hier et j'ai ouvert un PR .L'
sns.heatmap
API utile est ici . Vérifiez les paramètres, il y en a un bon nombre. Exemple:la source
Si vous voulez une carte thermique interactive à partir d'un Pandas DataFrame et que vous exécutez un notebook Jupyter, vous pouvez essayer le widget interactif Clustergrammer-Widget , voir le notebook interactif sur NBViewer ici , documentation ici
Et pour des ensembles de données plus volumineux, vous pouvez essayer le widget WebGL Clustergrammer2 en développement (exemple de notebook ici )
la source
Veuillez noter que les auteurs de
seaborn
ne veulent queseaborn.heatmap
travailler qu'avec des dataframes catégoriques. Ce n'est pas général.Si votre index et vos colonnes sont des valeurs numériques et / ou datetime, ce code vous sera très utile.
La fonction de cartographie thermique de Matplotlib
pcolormesh
nécessite des bins au lieu d' index , il existe donc du code sophistiqué pour créer des bins à partir de vos index de dataframe (même si votre index n'est pas uniformément espacé!).Le reste est simplement
np.meshgrid
etplt.pcolormesh
.Appelez-le en utilisant
heatmap(df)
, et voyez-le en utilisantplt.show()
.la source