Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Moving title above the colorbar in Seaborn heatmap

I have made a heatmap in Seaborn, and I have a corresponding horizontal colorbar. I've added a title to the colorbar, however, the title appears below the colorbar when I actually want it above. Is there some why I can change this? And is it possible to change the font size of the title and the size of the labels on the colorbar?

fig, ax = plt.subplots(figsize=(30,12))
graph = sns.heatmap(df_pivot, cmap="Blues", linecolor="white", linewidths=0.1, 
            cbar_kws={"orientation": "horizontal", "shrink":0.40, "aspect":40, "label": "Number of accidents"})


ax.set_title("Number of traffic accidents per day & hour combination", 
fontsize=30, fontweight="bold")

from matplotlib import rcParams
rcParams['axes.titlepad'] = 70 # Space between the title and graph

locs, labels = plt.yticks() # Rotating row labels
plt.setp(labels, rotation=0) # Rotating row labels

ax.xaxis.tick_top() # x axis on top
ax.xaxis.set_label_position('top')

graph.tick_params(axis='both',labelsize=15) # Tick label size
graph

This is what it looks like so far. I want the "Number of accidents" title to be ABOVE the colorbar, but BELOW the heatmap. and I want the colorbar to be as wide as the heatmap.

enter image description here

like image 779
Kara W Avatar asked Sep 15 '17 19:09

Kara W


People also ask

What is Vmax in heatmap?

vmin, vmax: Values to anchor the colormap, otherwise they are inferred from the data and other keyword arguments. cmap: The mapping from data values to color space. center: The value at which to center the colormap when plotting divergent data.

What is CMAP in heatmap?

You can customize the colors in your heatmap with the cmap parameter of the heatmap() function in seaborn. The following examples show the appearences of different sequential color palettes.


1 Answers

Plot your colorbar in separately plot like in this example. For more info read the comments:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")

# set height ratios of heatmap and coresponding colorbar
# hspace shows space between plots
# adjust hspace to put your title of colorbar correctly
grid_kws = {"height_ratios": (.9, .05), "hspace": .15}
f, (ax, cbar_ax) = plt.subplots(2, gridspec_kw=grid_kws, figsize=(30,12))
ax = sns.heatmap(flights, ax=ax,
    cbar_ax=cbar_ax,
    cbar_kws={"orientation": "horizontal","label": "Number of accidents"})

# set title and set font of title
ax.set_title("Number of traffic accidents per day & hour combination", 
fontsize=30, fontweight="bold")

# set font size of colorbar labels
cbar_ax.tick_params(labelsize=25) 

plt.show()

enter image description here

like image 126
Serenity Avatar answered Oct 09 '22 03:10

Serenity