Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Seaborn Heatmap with logarithmic-scale colorbar

Is there a way to set the color bar scale to log on a seaborn heat map graph?
I am using a pivot table output from pandas as an input to the call

 sns.heatmap(df_pivot_mirror,annot=False,xticklabels=256,yticklabels=128,cmap=plt.cm.YlOrRd_r) 

Thank you.

like image 232
fulatoro Avatar asked Apr 27 '16 18:04

fulatoro


People also ask

How do I change my color palette in Seaborn heatmap?

You can customize the colors in your heatmap with the cmap parameter of the heatmap() function in seaborn.

What is FMT in Seaborn heatmap?

heatmap() fmt parameter – add text on each cell. fmt: Pass value as a string, optional.


1 Answers

If you have a current install of seaborn, norm=LogNorm() in the call to heatmap works now. (Pointed out in the comments -- thank you.) Adding this to one of the seaborn examples:

import numpy as np import seaborn as sns; sns.set_theme(style='white') import matplotlib.pyplot as plt from matplotlib.colors import LogNorm, Normalize from matplotlib.ticker import MaxNLocator  flights = sns.load_dataset("flights") flights = flights.pivot("month", "year", "passengers")   f3, ax5 = plt.subplots(1,1) sns.heatmap(flights, square=True, norm=LogNorm()) 

Heatmap with lognorm colorbar, four tick labels

You can pass through colorbar arguments as keywords in the seaborn wrapper, but they sometimes collide with the seaborn choices:

sns.heatmap(flights, square=True, norm=LogNorm(), cbar_kws={'ticks':MaxNLocator(2), 'format':'%.e'}) 

Heatmap with lognorm colorbar, four tick labels with inconsistent numerical formatting

For comparison, this is the matplotlib heatmap without seaborn's improvements -- the colorbar arguments have both been applied:

f5, ax6 = plt.subplots(1,1) im6 = plt.imshow(flights, norm=LogNorm()) cbar6 = ax.figure.colorbar(im6, ax=ax6, ticks=MaxNLocator(2), format='%.e') 

Heatmap with lognorm colorbar, two tick labels, scientific number formatting

If you have to use an older install and LogNorm doesn't work in seaborn, see the previous versions of this answer for a workaround.

like image 133
cphlewis Avatar answered Sep 19 '22 11:09

cphlewis