Comment ajouter du texte (unités, %, etc) dans les cellules d'une heatmap avec seaborn en python ?

Comment ajouter du texte (unités, %, etc) dans les cellules d'une heatmap avec seaborn en python ?

Daidalos 22 avril 2020


Exemple de comment ajouter du texte (unités, %, etc) dans les cellules d'une heatmap avec seaborn en python:

Créer une simple heatmap avec seaborn

Créeons une simple heatmap avec seaborn:

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = np.array([[25.55535942,  1.99598017,  9.78107706],
 [ 4.95758736, 39.68268716, 16.78109873],
 [ 0.45401194,  0.10003128,  0.6921669 ]])

df = pd.DataFrame(data=data)

fig = plt.figure(num=None, figsize=(10, 10), dpi=80, facecolor='w', edgecolor='k')

cmap = sns.cubehelix_palette(light=1, as_cmap=True)

res = sns.heatmap(df, annot=True, vmin=0.0, vmax=100.0, 
                  fmt='.2f', cmap=cmap, cbar_kws={"shrink": .82},
                  linewidths=0.1, linecolor='gray')

res.invert_yaxis()

plt.title('Seaborn heatmap - add ')

plt.show()

Comment ajouter du texte (unités, %, etc) dans les cellules d'une heatmap avec seaborn en python ?

Ajouter du texte sur les cellules de la heatmap

Pour ajouter par exemple le symbole % (pourcentage) dans toutes les cellules de la heatmap, on peut ajouter la ligne suivante:

for t in res.texts: t.set_text(t.get_text() + " %")

Code complet:

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


data = np.array([[25.55535942,  1.99598017,  9.78107706],
 [ 4.95758736, 39.68268716, 16.78109873],
 [ 0.45401194,  0.10003128,  0.6921669 ]])

df = pd.DataFrame(data=data)

fig = plt.figure(num=None, figsize=(10, 10), dpi=80, facecolor='w', edgecolor='k')

cmap = sns.cubehelix_palette(light=1, as_cmap=True)

res = sns.heatmap(df, annot=True, vmin=0.0, vmax=100.0, 
                  fmt='.2f', cmap=cmap, cbar_kws={"shrink": .82},
                  linewidths=0.1, linecolor='gray')

res.invert_yaxis()

for t in res.texts: t.set_text(t.get_text() + " %")

plt.title('Seaborn heatmap - add ')

plt.savefig('seaborn_heatmap_with_frame_and_cell_border_01.png')              
plt.show()

donne

Comment ajouter du texte (unités, %, etc) dans les cellules d'une heatmap avec seaborn en python ?

Personnaliser les annotations

Autre solution, on peut aussi personnaliser les annotations

labels =  np.array([['A','B','C'],['D','E','F'],['G','H','I']])

et modifier dans la fonction heatmap():

annot=labels et  fmt=''

Code complet

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


data = np.array([[25.55535942,  1.99598017,  9.78107706],
 [ 4.95758736, 39.68268716, 16.78109873],
 [ 0.45401194,  0.10003128,  0.6921669 ]])

df = pd.DataFrame(data=data)

fig = plt.figure(num=None, figsize=(10, 10), dpi=80, facecolor='w', edgecolor='k')

cmap = sns.cubehelix_palette(light=1, as_cmap=True)

labels =  np.array([['A','B','C'],['D','E','F'],['G','H','I']])

res = sns.heatmap(df, annot=labels, vmin=0.0, vmax=100.0, 
                  fmt='', cmap=cmap, cbar_kws={"shrink": .82},
                  linewidths=0.1, linecolor='gray')

res.invert_yaxis()

#for t in res.texts: t.set_text(t.get_text() + " %")

plt.savefig('seaborn_heatmap_add_annotation_02.png')              
plt.show()

donne

Comment ajouter du texte (unités, %, etc) dans les cellules d'une heatmap avec seaborn en python ?

Références