[Matplotlib-users] fixed colorbar position for repeated plots

Heiland, Randy heiland at iu.edu
Tue May 8 12:24:16 EDT 2018


Thanks Kotaro! That does indeed seem to be what I needed.

Randy

> On May 8, 2018, at 12:14 PM, Saito Kotaro (PSI) <kotaro.saito at psi.ch> wrote:
> 
> Dear Randy,
> 
> This might works.
> 
> -------------
> fig, ax = plt.subplots()
> 
> # first time
> data = np.clip(randn(250, 250), -1, 1)
> img = ax.imshow(data, interpolation='nearest')
> cbar = fig.colorbar(img, ticks=[-1, 0, 1])
> 
> # second time, reusing colorbar axis
> data = 2*data
> img = ax.imshow(data, interpolation='nearest')
> cbar = fig.colorbar(img, cax=cbar.ax, ticks=[-1, 0, 1])
> 
> plt.show()
> -------------
> 
> If you don’t specify cax, fig.colorbar automatically rip out a part of space used by original ax for new Axes object where Colorbar object sits in.
> https://matplotlib.org/api/_as_gen/matplotlib.pyplot.colorbar.html
> That is why your code produce two colorbars.
> 
> I also modified some object names in your code.
> There are many inappropriate colorbar examples which mix up object names such as cbar, cax and img.
> ax.imshow returns AxesImage object and fig.colorbar make a colorbar from this AxesImage. That is why I name it img, not cax.
> Then, first fig.colorbar rips out a space from the original Axes, make a new Axes for colorbar, instantiates, puts and returns a Colorbar object.
> https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure.colorbar
> Colorbar object knows Axes object for itself (cbar.ax in my code). You can insert a line ”cax = cbar.ax" before second fig.colorbar and use “cax=cax”.
> 
> "2*data" in second plotting part is just to show that the second colorbar is properly produced without making new Axes.
> 
> Best regards,
> 
> Kotaro
> 
> //================//================//
> Paul Scherrer Institut
> Kotaro SAITO 斉藤耕太郎
> Laboratory for Neutron Scattering and Imaging
> WHGA/348
> 5232 Villigen PSI, Schweiz
> +41 56 310 3179
> kotaro.saito at psi.ch
> https://sites.google.com/view/kotarosaito/
> //================//================//
> 
>> On 2018/5/ 8, at 17:28, Heiland, Randy <heiland at iu.edu> wrote:
>> 
>> I have a script that lets a user step through and plot data in files and I want to fix the position, i.e. re-use, a single colorbar. How is this done? The following script illustrates the problem:
>> 
>> # adapted from https://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html
>> import matplotlib.pyplot as plt
>> import numpy as np
>> from numpy.random import randn
>> 
>> fig, ax = plt.subplots()
>> data = np.clip(randn(250, 250), -1, 1)
>> cax = ax.imshow(data, interpolation='nearest')
>> cbar = fig.colorbar(cax, ticks=[-1, 0, 1])
>> 
>> data = np.clip(randn(250, 250), -1, 1)
>> cax = ax.imshow(data, interpolation='nearest')
>> cbar = fig.colorbar(cax, ticks=[-1, 0, 1])
>> 
>> plt.show()
>> 
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users at python.org
>> https://mail.python.org/mailman/listinfo/matplotlib-users
> 



More information about the Matplotlib-users mailing list