[Matplotlib-users] Unusual layout (GridSpec?)

Eric Firing efiring at hawaii.edu
Thu Sep 19 18:01:58 EDT 2019

I don't think this is what gridspec is for, or can handle.  Instead, I 
think you will have to use a very manual approach to figure out the 
positions of the Axes objects that will make them and their tick 
locations line up as desired. An example is in the attached script.

Caution: the example will work correctly only if your dpi setting is 
such that the specified figsize can be fully displayed on your screen; 
if it is too big, mpl will shrink it to fit, and then all the 
calculations will be out of whack.


On 2019/09/19 10:39 AM, Paul Hobson wrote:
> I don't think I understand your problem fully, but a GridSpec sounds 
> like it'll fit the bill. We have a tutorial on it at our website. You'll 
> probably get the most mileage out of the width_ratios and height_ratios 
> parameters:
> https://matplotlib.org/tutorials/intermediate/gridspec.html
> On Thu, Sep 19, 2019 at 12:02 PM Bruno Pagani 
> <bruno.pagani at astrophysics.eu <mailto:bruno.pagani at astrophysics.eu>> wrote:
>     Hi there,
>     I’m trying to combine three graphs into one, but with some specific
>     constraints on the layout. The three graphs are having the same x and y
>     variables, but not over the same span. Each graph size should reflects
>     that (e.g. if a change of 1 on the x axis is 1 cm on one graph, so
>     should it be for the other ones). Also, I’d like the y label and ticks
>     labels to be shared amongst the three graphs. Same goes for the colorbar
>     (those are scatter plots) and the legend.
>     Attached are the three figures (.pdf), and what the combined version
>     should look like (target.png, but here it was obtained by removing parts
>     by hand and stretching everything to fit).
>     Below is some minimal code to produce three similarly looking graphs, if
>     someone has an idea (GridSpec?) for this, I should be able to adapt it
>     to my actual code:
>     import matplotlib.pyplot as plt
>     import numpy as np
>     plt.scatter(np.repeat(np.linspace(0,3.5,15)[:,None],11,axis=1),np.repeat(np.linspace(0,0.5,11)[None,:],15,axis=0),c=np.random.random((15,11)),label="Some
>     label")
>     plt.scatter(np.repeat(np.linspace(0,6,25)[:,None],11,axis=1),np.repeat(np.linspace(0,0.5,11)[None,:],25,axis=0),c=np.random.random((25,11)),marker='*',label="Some
>     other label")
>     plt.scatter(np.repeat(np.linspace(0,11,23)[:,None],11,axis=1),np.repeat(np.linspace(0,0.5,11)[None,:],23,axis=0),c=np.random.random((23,11)),marker='D',label="Yet
>     another label")
>     Regards,
>     Bruno
>     _______________________________________________
>     Matplotlib-users mailing list
>     Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
>     https://mail.python.org/mailman/listinfo/matplotlib-users
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org
> https://mail.python.org/mailman/listinfo/matplotlib-users

-------------- next part --------------
A non-text attachment was scrubbed...
Name: custom_layout.py
Type: text/x-python-script
Size: 1447 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20190919/db6237d6/attachment.bin>

More information about the Matplotlib-users mailing list