Il est surprenant que personne n'ait mentionné des alternatives plus performantes, interactives et faciles à utiliser.
A) Vous pouvez utiliser plotly :
-
Deux lignes seulement et vous obtenez :
-
l'interactivité,
-
échelle lisse,
-
couleurs basées sur l'ensemble du cadre de données au lieu des colonnes individuelles,
-
noms de colonnes et indices de lignes sur les axes,
-
en faisant un zoom,
-
panning,
-
la possibilité intégrée de l'enregistrer en un clic au format PNG,
-
auto-scaling,
-
comparaison au survol,
-
des bulles montrant les valeurs afin que la carte thermique soit toujours belle et que vous puissiez voir les valeurs où vous voulez :
import plotly.express as px
fig = px.imshow(df.corr())
fig.show()
B) Vous pouvez également utiliser le Bokeh :
Toutes les mêmes fonctionnalités, mais avec un peu plus d'inconvénients. Mais ça vaut quand même le coup si vous ne voulez pas vous inscrire à plotly et que vous voulez quand même toutes ces choses :
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource, LinearColorMapper
from bokeh.transform import transform
output_notebook()
colors = ['#d7191c', '#fdae61', '#ffffbf', '#a6d96a', '#1a9641']
TOOLS = "hover,save,pan,box_zoom,reset,wheel_zoom"
data = df.corr().stack().rename("value").reset_index()
p = figure(x_range=list(df.columns), y_range=list(df.index), tools=TOOLS, toolbar_location='below',
tooltips=[('Row, Column', '@level_0 x @level_1'), ('value', '@value')], height = 500, width = 500)
p.rect(x="level_1", y="level_0", width=1, height=1,
source=data,
fill_color={'field': 'value', 'transform': LinearColorMapper(palette=colors, low=data.value.min(), high=data.value.max())},
line_color=None)
color_bar = ColorBar(color_mapper=LinearColorMapper(palette=colors, low=data.value.min(), high=data.value.max()), major_label_text_font_size="7px",
ticker=BasicTicker(desired_num_ticks=len(colors)),
formatter=PrintfTickFormatter(format="%f"),
label_standoff=6, border_line_color=None, location=(0, 0))
p.add_layout(color_bar, 'right')
show(p)