Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set Colorbar Range in matplotlib

I have the following code:

import matplotlib.pyplot as plt  cdict = {   'red'  :  ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),   'green':  ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),   'blue' :  ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45)) }  cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)  plt.clf() plt.pcolor(X, Y, v, cmap=cm) plt.loglog() plt.xlabel('X Axis') plt.ylabel('Y Axis')  plt.colorbar() plt.show() 

So this produces a graph of the values 'v' on the axes X vs Y, using the specified colormap. The X and Y axes are perfect, but the colormap spreads between the min and max of v. I would like to force the colormap to range between 0 and 1.

I thought of using:

plt.axis(...) 

To set the ranges of the axes, but this only takes arguments for the min and max of X and Y, not the colormap.

Edit:

For clarity, let's say I have one graph whose values range (0 ... 0.3), and another graph whose values (0.2 ... 0.8).

In both graphs, I will want the range of the colorbar to be (0 ... 1). In both graphs, I want this range of colour to be identical using the full range of cdict above (so 0.25 in both graphs will be the same colour). In the first graph, all colours between 0.3 and 1.0 won't feature in the graph, but will in the colourbar key at the side. In the other, all colours between 0 and 0.2, and between 0.8 and 1 will not feature in the graph, but will in the colourbar at the side.

like image 945
Paul Avatar asked Jul 30 '10 16:07

Paul


People also ask

How do I set the range in Colorbar?

Use the vmin and vmax Parameter to Set the Range of Colorbar in Python. The vmin and vmax parameters can be used to specify the scale for mapping color values. These parameters work with the object, which uses colormaps. It can be used to control the range of the colorbar in matplotlib.

How do I change the color bar in Matplotlib?

You can change the color of bars in a barplot using color argument. RGB is a way of making colors. You have to to provide an amount of red, green, blue, and the transparency value to the color argument and it returns a color.


1 Answers

Using vmin and vmax forces the range for the colors. Here's an example:

enter image description here

import matplotlib as m import matplotlib.pyplot as plt import numpy as np  cdict = {   'red'  :  ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),   'green':  ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),   'blue' :  ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45)) }  cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)  x = np.arange(0, 10, .1) y = np.arange(0, 10, .1) X, Y = np.meshgrid(x,y)  data = 2*( np.sin(X) + np.sin(3*Y) )  def do_plot(n, f, title):     #plt.clf()     plt.subplot(1, 3, n)     plt.pcolor(X, Y, f(data), cmap=cm, vmin=-4, vmax=4)     plt.title(title)     plt.colorbar()  plt.figure() do_plot(1, lambda x:x, "all") do_plot(2, lambda x:np.clip(x, -4, 0), "<0") do_plot(3, lambda x:np.clip(x, 0, 4), ">0") plt.show() 
like image 117
tom10 Avatar answered Sep 21 '22 23:09

tom10