Python matplotlib example colorbar from scratch#

Software requirements:

  • Python 3

  • matplotlib

Run the colorbar example script:

python colorbar_from_scratch.py

Script colorbar_from_scratch.py:

#!/usr/bin/env python
# coding: utf-8
#------------------------------------------------------------------------------
# DKRZ tutorial
#
# Create colorbar from scratch (stand alone)
#
# Content
#
# - create a colorbar from RGB-values
# - create a colorbar without the need of a mappable object using
#       matplotlib.colorbar.Colorbar()
# - write custom labels below each color box
# - write a colorbar title string
# - save colorbar figure to PNG file
#
#
# See https://matplotlib.org/stable/api/colorbar_api.html#matplotlib.colorbar.Colorbar
#
# 2022 copyright DKRZ, kmf
#------------------------------------------------------------------------------
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import matplotlib.colorbar as colorbar

#-- define the colors for the colormap.
cmap_rgb = [[0.997785, 0.999139, 0.846059],
            [0.910127, 0.964937, 0.695640],
            [0.769320, 0.909419, 0.706959],
            [0.521292, 0.812964, 0.731073],
            [0.304483, 0.732118, 0.761430],
            [0.141961, 0.597647, 0.756078],
            [0.122107, 0.483137, 0.712711],
            [0.131949, 0.382745, 0.665467],
            [0.138408, 0.297578, 0.624990],
            [0.031373, 0.113725, 0.345098]]

#-- generate a listed colormap for plotting
cmap = mcolors.ListedColormap(cmap_rgb)

#-- define some levels and labels
levels  =  [1, 2, 5, 10, 50, 100, 200, 500, 1000, 2000]
labels  =  ['1','2','>5','>10','>50','>100','>200','>500','>1000','>2000']

#-- create the plot
fig = plt.figure(figsize=(10,3))
cax = fig.add_axes([0.05, 0.5, 0.9, 0.08],        #-- [x, y, width, height]
                    autoscalex_on=True)
cbar = colorbar.Colorbar(cax,
                             orientation='horizontal',
                             cmap=cmap,
                             norm=plt.Normalize(-0.5, len(cmap_rgb) - 0.5))

cbar.set_ticks(range(len(cmap_rgb)))
cbar.ax.set_xticklabels(labels, fontsize=10)
cbar.solids.set_edgecolor('black')
cbar.set_label(label='Colorbar label', weight='bold', fontsize=14)

#plt.show()
plt.savefig('plot_colorbar_from_scratch.png', facecolor='white')

Plot result:

image0