Le module python seaborn est basé sur matplotlib, et produit une très belle carte thermique.
Vous trouverez ci-dessous une implémentation avec seaborn, conçue pour le notebook ipython / jupyter.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# import the data directly into a pandas dataframe
nba = pd.read_csv("http://datasets.flowingdata.com/ppg2008.csv", index_col='Name ')
# remove index title
nba.index.name = ""
# normalize data columns
nba_norm = (nba - nba.mean()) / (nba.max() - nba.min())
# relabel columns
labels = ['Games', 'Minutes', 'Points', 'Field goals made', 'Field goal attempts', 'Field goal percentage', 'Free throws made',
'Free throws attempts', 'Free throws percentage','Three-pointers made', 'Three-point attempt', 'Three-point percentage',
'Offensive rebounds', 'Defensive rebounds', 'Total rebounds', 'Assists', 'Steals', 'Blocks', 'Turnover', 'Personal foul']
nba_norm.columns = labels
# set appropriate font and dpi
sns.set(font_scale=1.2)
sns.set_style({"savefig.dpi": 100})
# plot it out
ax = sns.heatmap(nba_norm, cmap=plt.cm.Blues, linewidths=.1)
# set the x-axis labels on the top
ax.xaxis.tick_top()
# rotate the x-axis labels
plt.xticks(rotation=90)
# get figure (usually obtained via "fig,ax=plt.subplots()" with matplotlib)
fig = ax.get_figure()
# specify dimensions and save
fig.set_size_inches(15, 20)
fig.savefig("nba.png")
Le résultat ressemble à ceci:
j'ai utilisé la carte de couleurs matplotlib Blues, mais je trouve personnellement les couleurs par défaut assez belles. J'ai utilisé matplotlib pour faire pivoter les étiquettes de l'axe x, car je ne trouvais pas la syntaxe seaborn. Comme noté par grexor, il était nécessaire de spécifier les dimensions (fig.set_size_inches) par essais et erreurs, ce que j'ai trouvé un peu frustrant.
Comme l'a noté Paul H, vous pouvez facilement ajouter les valeurs aux cartes thermiques (annot = True), mais dans ce cas, je ne pense pas que cela ait amélioré la figure. Plusieurs extraits de code ont été extraits de l'excellente réponse de joelotz.