Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scientific notation colorbar in matplotlib

I am trying to put a colorbar to my image using matplotlib. The issue comes when I try to force the ticklabels to be written in scientific notation. How can I force the scientific notation (ie, 1x10^0, 2x10^0, ..., 1x10^2, and so on) in the ticks of the color bar?

Example, let's create and plot and image with its color bar:

import matplotlib as plot
import numpy as np

img = np.random.randn(300,300)
myplot = plt.imshow(img)
plt.colorbar(myplot)
plt.show()

When I do this, I get the following image:

image created with the previous code

However, I would like to see the ticklabels in scientific notation... Is there any one line command to do this? Otherwise, is there any hint out there? Thanks!

like image 746
Alejandro Avatar asked Sep 22 '14 21:09

Alejandro


3 Answers

You could use colorbar's format parameter:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as ticker

img = np.random.randn(300,300)
myplot = plt.imshow(img)

def fmt(x, pos):
    a, b = '{:.2e}'.format(x).split('e')
    b = int(b)
    return r'${} \times 10^{{{}}}$'.format(a, b)

plt.colorbar(myplot, format=ticker.FuncFormatter(fmt))
plt.show()

enter image description here

like image 91
unutbu Avatar answered Sep 24 '22 05:09

unutbu


You can specify the format of the colorbar ticks as follows:

pl.colorbar(myplot, format='%.0e')
like image 24
Falko Avatar answered Sep 23 '22 05:09

Falko


There is a more straightforward (but less customizable) way to get scientific notation in a ColorBar without the %.0e formatting.

Create your ColorBar:

cbar = plt.colorbar()

And call the formatter:

cbar.formatter.set_powerlimits((0, 0))

This will make the ColorBar use scientific notation. See the example figure below to see how the ColorBar will look.

enter image description here

The documentation for this function can be found here.

like image 10
Joseph Farah Avatar answered Sep 25 '22 05:09

Joseph Farah