CJD*_*CJD 6 python plot numpy matplotlib
我已经构建了一组饼图,其中有一些帮助将图像插入饼图切片 我的图表看起来很精彩,现在我需要将它们中的所有6个放在一个2x3图中,在共享的x和y轴上有共同的刻度线.为了开始,我正在看子图,并认为我可以让它工作.我下载了一些例子并开始尝试一些事情.
f, (a) = (plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True))#,
#squeeze=False, subplot_kw=None, gridspec_kw=None))
print(type(f),'\n',type(a),'\n')#,type(b))
Run Code Online (Sandbox Code Playgroud)
收益率:
class'matplotlib.figure.Figure'
class'matplotlib.axes._subplots.AxesSubplot'
而:
f, (a) = (plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None))
print(type(f),'\n',type(a),'\n')#,type(b))
Run Code Online (Sandbox Code Playgroud)
收益:
class'matplotlib.figure.Figure'
'numpy.ndarray'
当我这样做:
f, (a,b) = (plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None))
print(type(f),'\n',type(a),'\n',type(b))
Run Code Online (Sandbox Code Playgroud)
我得到了类似的结果,但是如果nrows = 1且ncols = 2我得到一个错误:
f, (a,b) = (plt.subplots(nrows=1, ncols=2, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None))
print(type(f),'\n',type(a),'\n',type(b))
Run Code Online (Sandbox Code Playgroud)
ValueError:没有足够的值来解包(预期2,得1)
但是这个:
f, (a , b) = (
plt.subplots(nrows=1, ncols=2, sharex=True, sharey=True))#,
#squeeze=False, subplot_kw=None, gridspec_kw=None))
print(type(f),'\n',type(a),'\n',type(b))
Run Code Online (Sandbox Code Playgroud)
给出'matplotlib.figure.Figure'类
class'matplotlib.axes._subplots.AxesSubplot'
class'matplotlib.axes._subplots.AxesSubplot'
为什么它或阵列或轴,以及为什么2X1工作和1X2不工作?我希望天堂高,我可以更好地理解文档.谢谢.
Imp*_*est 15
不同的返回类型是由默认情况下设置为的squeeze
关键字参数引起的.让我们通过相应的拆包来增强文档:plt.subplots()
True
squeeze:bool,optional,默认值:True
如果为True,则从返回的Axes对象中挤出额外的维度:
- 如果只构造了一个子图(nrows = ncols = 1),则生成的单个Axes对象将作为标量返回.
fig, ax = plt.subplots()
- 对于Nx1或1xN子图,返回的对象是Axes对象的1D numpy对象数组,作为numpy 1D数组返回.
fig, (ax1, ..., axN) = plt.subplots(nrows=N, ncols=1)
(对于Nx1)
fig, (ax1, ..., axN) = plt.subplots(nrows=1, ncols=N)
(对于1xN)- 对于NxM,N> 1且M> 1的子图作为2D数组返回.
fig, ((ax11, .., ax1M),..,(axN1, .., axNM)) = plt.subplots(nrows=N, ncols=M)
- 如果为False,则根本不进行压缩:返回的Axes对象始终是包含Axes实例的2D数组,即使它最终为1x1.对于1xN的
fig, ((ax,),) = plt.subplots(nrows=1, ncols=1, squeeze=False)
fig, ((ax,), .. ,(axN,)) = plt.subplots(nrows=N, ncols=1, squeeze=False)
Nx1
fig, ((ax, .. ,axN),) = plt.subplots(nrows=1, ncols=N, squeeze=False)
fig, ((ax11, .., ax1M),..,(axN1, .., axNM)) = plt.subplots(nrows=N, ncols=M)
或者,您可以始终使用解压缩版本
fig, ax_arr = plt.subplots(nrows=N, ncols=M, squeeze=False)
Run Code Online (Sandbox Code Playgroud)
并索引数组以获得轴,ax_arr[1,2].plot(..)
.
因此,对于2 x 3网格,如果设置squeeze
为,则实际上并不重要False
.结果将始终是2D数组.你可以打开包装
fig, ((ax1, ax2, ax3),(ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3)
Run Code Online (Sandbox Code Playgroud)
有ax{i}
作为matplotlib轴对象,或者您可以使用包装版本
fig, ax_arr = plt.subplots(nrows=2, ncols=3)
ax_arr[0,0].plot(..) # plot to first top left axes
ax_arr[1,2].plot(..) # plot to last bottom right axes
Run Code Online (Sandbox Code Playgroud)