[Matplotlib-users] Axes array for subplots

vincent.adrien at gmail.com vincent.adrien at gmail.com
Tue Apr 17 14:55:26 EDT 2018


Hi Virgil,

I suspect that should you are using something like
```
ax = axarr[i]
```
while `squeeze=False` will require that you use
```
ax = axarr[i, 0]
```
(from what I understood from you example).

Please find attached a code snippet that should hopefully better 
demonstrate this.

Best regards,
Adrien

On 04/17/2018 11:26 AM, Virgil Stokes wrote:
> 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>
>>>
>>>
>>
>>
> 
> 
> 
> _______________________________________________
> 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: example_virgil.py
Type: text/x-python
Size: 859 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20180417/d1167459/attachment.py>


More information about the Matplotlib-users mailing list