[Matplotlib-users] Axes array for subplots

Virgil Stokes vs at it.uu.se
Tue Apr 17 14:26:30 EDT 2018


ax is used in a function that references axarr. My problem is not about 
2D arrays.

--V


On 2018-04-17 17:22, Benjamin Root wrote:
> Virgil,
>
> How did you get from `axarr` to `ax`? The error message suggests that 
> you haven't fully indexed the result. Remember, with squeeze=False, 
> `axarr` will be a 2-D array, requiring two indices.
>
> Ben
>
> On Tue, Apr 17, 2018 at 11:14 AM, Virgil Stokes <vs at it.uu.se 
> <mailto:vs at it.uu.se>> wrote:
>
>     Ok Ben,
>
>     I tried the following per your suggestion:
>
>     fig, axarr = plt.subplots(NSub, figsize=(width,height),
>     squeeze=False, sharex=True)
>
>     but when the following is executed:
>
>       ax.grid(True)
>
>     I get the following error message:
>     builtins.AttributeError: 'numpy.ndarray' object has no attribute
>     'grid'
>
>     But, thanks for your help :-).
>
>
>     On 2018-04-17 16:30, Benjamin Root wrote:
>>     By default, `squeeze` is called on the array prior to returning
>>     it. This way, users don't need to deal with 2D arrays when most
>>     of the time, they are dealing with 1D setups. You can specify
>>     squeeze=False to subplots to turn this behavior off and always
>>     have a 2D array.
>>
>>     I hope that helps!
>>     Ben Root
>>
>>
>>     On Tue, Apr 17, 2018 at 10:12 AM, Virgil Stokes <vs at it.uu.se
>>     <mailto:vs at it.uu.se>> wrote:
>>
>>         The following line is part of a much larger python (3.6) with
>>         Matplotlib (2.2.2) program in which the number of subplots is
>>         determined from input data:
>>
>>         fig, axarr = plt.subplots(NSub, figsize=(width,height),
>>         sharex=True)
>>
>>         This works fine when the number of subplots (NSub) is greater
>>         than 1. For example when NSub=3, axarr is an array of length
>>         3 and contains:
>>
>>         array([<matplotlib.axes._subplots.AxesSubplot object at
>>         0x0000025900E9DDD8>,
>>         <matplotlib.axes._subplots.AxesSubplot object at
>>         0x00000259011897F0>,
>>         <matplotlib.axes._subplots.AxesSubplot object at
>>         0x00000259011C7128>],
>>                 dtype=object)
>>
>>         However, when NSub=1, axarr contains:
>>
>>         <matplotlib.axes._subplots.AxesSubplot object at
>>         0x00000161AB26AE80>
>>
>>         and of course, will give an error if axarr is an array; i.e.
>>
>>         builtins.TypeError: 'AxesSubplot' object does not support
>>         indexing
>>
>>         For my code this requires special handling because axarr is
>>         no longer an array. Why not have axarr contain:
>>
>>         array([<matplotlib.axes._subplots.AxesSubplot object at
>>         0x00000161AB26AE80>],dtype=object)
>>
>>         when NSub=1. IMHO this is consistent; i.e. it is an array
>>         with a length that is equal to the number of subplots.
>>
>>         _______________________________________________
>>         Matplotlib-users mailing list
>>         Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
>>         https://mail.python.org/mailman/listinfo/matplotlib-users
>>         <https://mail.python.org/mailman/listinfo/matplotlib-users>
>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20180417/e751ad8a/attachment.html>


More information about the Matplotlib-users mailing list