Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spacing between some subplots but not all

Tags:

I have a matplotlib plot in python with 3 subplots, all in 1 column.

I currently control the height of each subplot with:

gridspec.GridSpec(3, 1, height_ratios=[1, 3, 3]) 

I have no spacing via:

plt.subplots_adjust(hspace=0.0) 

But I would like to put some spacing between row 2 and 3 only.

In one of the other answers, I read that I can do something like:

gs1.update(left=0.05, right=0.48, wspace=0) 

But I don't really understand what is happening. Could someone give me some more information please?

like image 494
user1551817 Avatar asked Jul 17 '15 20:07

user1551817


People also ask

How do I increase the space between two subplots?

You can use plt. subplots_adjust to change the spacing between the subplots. Show activity on this post. Using subplots_adjust(hspace=0) or a very small number ( hspace=0.001 ) will completely remove the whitespace between the subplots, whereas hspace=None does not.

How do I remove spaces between subplots in Matlab?

Padding = 'none'; t. TileSpacing = 'none'; Note that the last two commands get rid of all the space between the tiled plots.

How do I reduce the space between two subplots in Matplotlib?

subplots_adjust() Method to Change Space Between Subplots in Matplotlib. We can use the plt. subplots_adjust() method to change the space between Matplotlib subplots. wspace and hspace specify the space reserved between Matplotlib subplots.


1 Answers

When you call update, you're applying those parameters to all of the subplots in that particular gridspec. If you want to use different parameters for different subplots, you can make multiple gridspecs. However, you'll need to make sure they are the correct size and don't overlap. One way do to that is with nested gridspecs. Since the total height of the bottom two plots is 6 times the top, the outer gridspec will have a height ratio of [1, 6].

import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec   def do_stuff(cell): #just so the plots show up     ax = plt.subplot(cell)     ax.plot()     ax.get_xaxis().set_visible(False)     ax.get_yaxis().set_visible(False) plt.subplots_adjust(hspace=0.0) #make outer gridspec outer = gridspec.GridSpec(2, 1, height_ratios = [1, 6])  #make nested gridspecs gs1 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec = outer[0]) gs2 = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec = outer[1], hspace = .05) for cell in gs1:     do_stuff(cell) for cell in gs2:     do_stuff(cell) plt.show() 

Plot with three subplots

like image 88
Amy Teegarden Avatar answered Sep 18 '22 20:09

Amy Teegarden