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:
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> 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:
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 Matplotlib-users Info Page
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:
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> wrote:
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> 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:
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 Matplotlib-users Info Page
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:
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:
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.
Virgil, I will be very specific: The following all references the copy of
Plotting_Test03.py you sent me.
At line 263, you have a comment: "# The Axes array (axarr) will be a list
of NSub objects (an axis for each subplot)". This is incorrect. `axarr` is
not a list, but a numpy array *or scalar*. When plt.subplots(1) is called,
you get a numpy scalar, which is the problem that you originally approached
us about. When plt.subplots(2) is called, you get a 1D numpy array, which
looks a lot like a list.
However, if plt.subplots(2, squeeze=False) is called, then you get a *2D*
numpy array of axes, of shape (2, 1). That is because plt.subplots(), in
the general case, is used for specifying the number of rows and columns of
subplots, so without squeezing, the axes array is 2D.
Therefore, if you have squeeze=False turned on in plt.subplots(), then line
306 needs to change to `ax = axarr[j, 0]`. Similar to line 318, and the
area around line 331.
Ben Root
···
On Tue, Apr 17, 2018 at 2:26 PM, Virgil Stokes <vs at it.uu.se> 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> wrote:
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> 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:
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 Matplotlib-users Info Page
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
ax is used in a function that references axarr. My problem is not about
2D arrays.
--V
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.
I get the following error message:
builtins.AttributeError: 'numpy.ndarray' object has no attribute
'grid'
But, thanks for your help :-).
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
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:
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.