matplotlib 中子图命令内的索引错误

Jas*_*son 0 python plot matplotlib

我不确定这是否是源代码的一个小错误,但子图不会分散绘制两个形状为 (1018,) 的数组。这两个数组都是 OLS 回归的结果。在使用指定的子图命令之前,我在使用变量执行散点图时从未遇到过问题。下面是我的代码:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12,5))

axes[0,0].scatter(Blodgett_wue_obs,Blodgett_wue_results.fittedvalues,color ='blue')
axes[0,0].plot(Blodgett_wue_obs,Blodgett_wue_obs,'r')


File "<ipython-input-311-527571e09d59>", line 1, in <module>
runfile('/Users/JasonDucker/Documents/forJason/Paper_Plots.py', wdir='/Users/JasonDucker/Documents/forJason')

File "/Users/JasonDucker/anaconda/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
execfile(filename, namespace)

File "/Users/JasonDucker/anaconda/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 78, in execfile
builtins.execfile(filename, *where)

File "/Users/JasonDucker/Documents/forJason/Paper_Plots.py", line 362, in <module>
axes[0,0].scatter(Blodgett_wue_obs,Blodgett_wue_results.fittedvalues,color ='blue')

IndexError: too many indices for array
Run Code Online (Sandbox Code Playgroud)

关于这个问题的任何想法将不胜感激!

xnx*_*xnx 5

如果您指定一行三列,则axes形状为(3,),而不是,因此您可以在, ,(1,3)处对数字进行索引。[0][1][2]

In [8]: fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12,5))
In [9]: axes.shape
Out[9]: (3,)
Run Code Online (Sandbox Code Playgroud)

plt.subplots始终返回二维数组的最佳方法是设置squeeze=False

In [8]: fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12,5), squeeze=False)
In [9]: axes.shape
Out[9]: (1,3)
Run Code Online (Sandbox Code Playgroud)

或者(如果您已经有axes一维数组),您可以使用:

axes = np.atleast_2d(axes)
Run Code Online (Sandbox Code Playgroud)

例如,

In [8]: fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12,5))
In [9]: axes.shape
Out[9]: (3,)
In[10]: axes = np.atleast_2d(axes)
In [11]: axes.shape
Out[11]: (1, 3)

In [12]: axes[0,0]
Out[12]: <matplotlib.axes._subplots.AxesSubplot at 0x1149499d0>
Run Code Online (Sandbox Code Playgroud)