Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib colorbar background and label placement

Up until recently I have been using Mathematica for my plots. Although it was a real pain and everything had to be done manually, the results where very close to what I wanted. One example is the following:

Mathematica example plot

I really like the grey rounded rectangle in the background of the colorbar. While everything had to be adjusted manually in Mathematica, matplotlib is a lot more automatic and already produced nice results.

Mathematica example plot

But there are still two problems I have:

  1. I don't know how to do a rounded rectangle in the background. I looked at the fancybbox patch but didn't get it to work with the colorbar as I want it to. What is the best way to get something like the Mathematica box? For the legend in plots there seems to be a fancy bbox option... but not for colorbars
  2. When I use the "lesser sign" (<) the label of colorbar moves too far to the right. How can I adjust this (maybe even "in-between" the numbers as in the Mathematica plot)?

I am looking forward to any suggestions pointing in the right direction :).

like image 469
oli Avatar asked Aug 23 '13 12:08

oli


People also ask

How do you rotate a Colorbar label in Python?

Steps to rotate colorbar ticklabels :Plot a figure. Plot corresponding colorbar. Provide ticks and ticklabels. Set rotation of ticklabels to desired angle.

How do you normalize a Colorbar in Python?

will map the data in Z linearly from -1 to +1, so Z=0 will give a color at the center of the colormap RdBu_r (white in this case). Matplotlib does this mapping in two steps, with a normalization from the input data to [0, 1] occurring first, and then mapping onto the indices in the colormap.

How do I add a legend to my Colorbar?

To plot data and draw a colorbar or legend in one go, pass a location (e.g., colorbar='r' or legend='b' ) to the plotting command (e.g., plot or contour ). To pass keyword arguments to the colorbar and legend commands, use the legend_kw and colorbar_kw arguments (e.g., legend_kw={'ncol': 3} ).


1 Answers

To your second question: you can use a negative labelpad value to move the label back towards the ticklabels, like this:

import numpy as np
import matplotlib.pyplot as plt

data = np.linspace(0, 10, num=256).reshape(16,16) 

cf = plt.contourf(data, levels=(0, 2.5, 5, 7.5, 10))
cb = plt.colorbar(cf)

cb.set_ticklabels([r'$<10^{0}$', 1, 2, r'$10^{14}$', r'$10^{14}+12345678$'])
cb.set_label(r'$n_e$ in $m^{-3}$', labelpad=-40, y=0.45)

plt.show()

Using the parameter y, you can additionally move the label up or down for better symmetry.

The argument of labelpad is given in points (1/72 inch). y accepts values in [0, 1], 0.0 is the lower border and 1.0 the upper.

The result:

Script Output

like image 197
mwil.me Avatar answered Sep 23 '22 06:09

mwil.me