Single Colorbar for multiple subplots

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Single Colorbar for multiple subplots

danjames95
Hi,

I am trying to plot 4 subplots in a 2 by 2 grid for mean sea level pressure data over the four seasons.

I have managed to plot all four in the same figure with their own individual colorbars, however, I would ideally like the figure to display one colorbar at the bottom to represent all four figures and I have been unsuccessful in doing this so far. There have been a few posts on this but as this is my first assignment (i'm a student at university) with python, I'm struggling to understand the answers!

The section of my code which involves the plotting of data is as follows:

...
#Select Projection
lon_0= 0
lat_0=lats.mean()

m = Basemap(projection = 'cyl', lat_0=lat_0, lon_0=lon_0, resolution = 'l')
#Convert Lons and Lats
x,y = np.meshgrid (lons_shifted,lats)
xx,yy= m(x,y)

v = np.linspace(980, 1030, 11, endpoint=True)

fig = plt.figure()

plt.subplot(2, 2, 1)
set1 = m.contourf(xx,yy,MSLP_WINTER, v)
m.drawmapboundary()
m.drawcoastlines()
plt.title('Winter')
bar = plt.colorbar(orientation = 'horizontal', ticks = v, format = '%.0f')
plt.xlim(-80,20)
plt.ylim (20,70)

plt.subplot(2, 2, 2)
set2 = m.contourf(xx,yy,MSLP_SPRING, v)
m.drawmapboundary()
m.drawcoastlines()
plt.title('Spring')
bar = plt.colorbar(orientation = 'horizontal', ticks = v)
plt.xlim(-80,20)
plt.ylim (20,70)

plt.subplot(2, 2, 3)
set3 = m.contourf(xx,yy,MSLP_SUMMER, v)
m.drawmapboundary()
m.drawcoastlines()
plt.title('Summer')
bar = plt.colorbar(orientation = 'horizontal', ticks = v)
plt.xlim(-80,20)
plt.ylim (20,70)

plt.subplot(2, 2, 4)
set4 = m.contourf(xx,yy,MSLP_AUTUMN, v)
m.drawmapboundary()
m.drawcoastlines()
plt.title('Autumn')
bar = plt.colorbar(orientation = 'horizontal', ticks = v)
plt.xlim(-80,20)
plt.ylim (20,70)

plt.suptitle("Seasonally Averaged Mean Sea Level Pressure between 2006 to 2016")

plt.show()

This creates the following image:

Any help would be very much appreciated.
Also, if there any obvious bad habits within this code, please feel free to point them out!

Thanks,
Dan
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Single Colorbar for multiple subplots

Jody Klymak
I modified matplotlib to let you do this by passing an array of axes to the ax argument of colorbar.  It's in the git master branch but that has other bugs so you may not want to use it yet.  

But the way to do this with older releases is to make the axis you want to put the colorbar in manually (cbax=fig.add_axes) with the correct position and then pass cbax to colorbar as the argument to the parameter cax.  Of course you may need to make the other subplots smaller prob using the subplots_adjust method if the figure.

Cheers.  Jody



Sent from my iPhone

> On Jul 19, 2017, at 07:31, danjames95 <[hidden email]> wrote:
>
> Hi,
>
> I am trying to plot 4 subplots in a 2 by 2 grid for mean sea level pressure
> data over the four seasons.
>
> I have managed to plot all four in the same figure with their own individual
> colorbars, however, I would ideally like the figure to display one colorbar
> at the bottom to represent all four figures and I have been unsuccessful in
> doing this so far. There have been a few posts on this but as this is my
> first assignment (i'm a student at university) with python, I'm struggling
> to understand the answers!
>
> The section of my code which involves the plotting of data is as follows:
>
> ...
> #Select Projection
> lon_0= 0
> lat_0=lats.mean()
>
> m = Basemap(projection = 'cyl', lat_0=lat_0, lon_0=lon_0, resolution = 'l')
> #Convert Lons and Lats
> x,y = np.meshgrid (lons_shifted,lats)
> xx,yy= m(x,y)
>
> v = np.linspace(980, 1030, 11, endpoint=True)
>
> fig = plt.figure()
>
> plt.subplot(2, 2, 1)
> set1 = m.contourf(xx,yy,MSLP_WINTER, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Winter')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v, format = '%.0f')
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.subplot(2, 2, 2)
> set2 = m.contourf(xx,yy,MSLP_SPRING, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Spring')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v)
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.subplot(2, 2, 3)
> set3 = m.contourf(xx,yy,MSLP_SUMMER, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Summer')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v)
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.subplot(2, 2, 4)
> set4 = m.contourf(xx,yy,MSLP_AUTUMN, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Autumn')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v)
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.suptitle("Seasonally Averaged Mean Sea Level Pressure between 2006 to
> 2016")
>
> plt.show()
>
> This creates the following image:
> <http://matplotlib.1069221.n5.nabble.com/file/n48091/MSLP_Seasonal_Averages.png>
>
> Any help would be very much appreciated.
> Also, if there any obvious bad habits within this code, please feel free to
> point them out!
>
> Thanks,
> Dan
>
>
>
> --
> View this message in context: http://matplotlib.1069221.n5.nabble.com/Single-Colorbar-for-multiple-subplots-tp48091.html
> Sent from the matplotlib - users mailing list archive at Nabble.com.
> _______________________________________________
> Matplotlib-users mailing list
> [hidden email]
> https://mail.python.org/mailman/listinfo/matplotlib-users

_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Single Colorbar for multiple subplots

Benjamin Root

On Sat, Aug 5, 2017 at 1:05 PM, Klymak Jody <[hidden email]> wrote:
I modified matplotlib to let you do this by passing an array of axes to the ax argument of colorbar.  It's in the git master branch but that has other bugs so you may not want to use it yet.

But the way to do this with older releases is to make the axis you want to put the colorbar in manually (cbax=fig.add_axes) with the correct position and then pass cbax to colorbar as the argument to the parameter cax.  Of course you may need to make the other subplots smaller prob using the subplots_adjust method if the figure.

Cheers.  Jody



Sent from my iPhone

> On Jul 19, 2017, at 07:31, danjames95 <[hidden email]> wrote:
>
> Hi,
>
> I am trying to plot 4 subplots in a 2 by 2 grid for mean sea level pressure
> data over the four seasons.
>
> I have managed to plot all four in the same figure with their own individual
> colorbars, however, I would ideally like the figure to display one colorbar
> at the bottom to represent all four figures and I have been unsuccessful in
> doing this so far. There have been a few posts on this but as this is my
> first assignment (i'm a student at university) with python, I'm struggling
> to understand the answers!
>
> The section of my code which involves the plotting of data is as follows:
>
> ...
> #Select Projection
> lon_0= 0
> lat_0=lats.mean()
>
> m = Basemap(projection = 'cyl', lat_0=lat_0, lon_0=lon_0, resolution = 'l')
> #Convert Lons and Lats
> x,y = np.meshgrid (lons_shifted,lats)
> xx,yy= m(x,y)
>
> v = np.linspace(980, 1030, 11, endpoint=True)
>
> fig = plt.figure()
>
> plt.subplot(2, 2, 1)
> set1 = m.contourf(xx,yy,MSLP_WINTER, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Winter')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v, format = '%.0f')
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.subplot(2, 2, 2)
> set2 = m.contourf(xx,yy,MSLP_SPRING, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Spring')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v)
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.subplot(2, 2, 3)
> set3 = m.contourf(xx,yy,MSLP_SUMMER, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Summer')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v)
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.subplot(2, 2, 4)
> set4 = m.contourf(xx,yy,MSLP_AUTUMN, v)
> m.drawmapboundary()
> m.drawcoastlines()
> plt.title('Autumn')
> bar = plt.colorbar(orientation = 'horizontal', ticks = v)
> plt.xlim(-80,20)
> plt.ylim (20,70)
>
> plt.suptitle("Seasonally Averaged Mean Sea Level Pressure between 2006 to
> 2016")
>
> plt.show()
>
> This creates the following image:
> <http://matplotlib.1069221.n5.nabble.com/file/n48091/MSLP_Seasonal_Averages.png>
>
> Any help would be very much appreciated.
> Also, if there any obvious bad habits within this code, please feel free to
> point them out!
>
> Thanks,
> Dan
>
>
>
> --
> View this message in context: http://matplotlib.1069221.n5.nabble.com/Single-Colorbar-for-multiple-subplots-tp48091.html
> Sent from the matplotlib - users mailing list archive at Nabble.com.
> _______________________________________________
> Matplotlib-users mailing list
> [hidden email]
> https://mail.python.org/mailman/listinfo/matplotlib-users

_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users


_______________________________________________
Matplotlib-users mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Single Colorbar for multiple subplots

danjames95
I have managed to sort this using cbax=fig.add_axes. Thank you for your help!

Thanks,
Dan
Loading...