绘图中的Matplotlib索引错误

Jan*_*ert 4 indexing matplotlib python-3.x

我基本上有以下脚本.但它在运行时遇到以下错误TypeError: 'Figure' object does not support indexing 就失败了axarr[0].plot(x,y).我试着搜索一下但发现了与创建子图有类似的错误...而且我只添加/替换数据(我不确定,因为它是matlab文件的副本,而我没有matlab).

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2, 0.01)
for idx in range(1, 10):
    a = 1 + (idx - 1) / 10

    y = a ** x

    axarr, fig = plt.subplots(1,1)
    axarr[0].plot(x,y)
    axarr.axis([0, 4, 0, 85])
    axarr[0].grid(True)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

可能我得到这个错误,因为我在一个循环中使用一个数字,但它看起来它在迭代1失败都准备好了.那么我错了什么或者什么可以更好以便这个工作(几乎等于matlab文件,请参阅下面的部分脚本)?
我希望有人可以提供帮助.

matlab文件相同的样本是这样的:

x = 0:0.01:4;
for idx = 1:10 
a = 1 + (idx-1)/10;

y = a.^x;
z = 2 * y
subplot(111)
plot(x,y)
hold on
plot(x(1:400),z)
axis([0 4 0 85])
pause
hold off

end
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 9

这里有两个问题:

  1. 回归plt.subplots是一个元组(Figure, array of Axes).因此,分配是

    fig, axarr = plt.subplots(1,1)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 上面并没有完全解决问题,因为你最终会得到一个类似的错误(TypeError: 'AxesSubplot' object does not support indexing).这是因为在使用仅一列和一行的情况下,默认情况下plt.subplots将减少array of Axes到单个轴.此行为由squeeze参数控制.使用有效的方法plt.subplots是这样

    fig, axarr = plt.subplots(1,1)
    axarr.plot(x,y)
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    fig, axarr  = plt.subplots(1,1, squeeze=False)
    axarr[0,0].plot(x,y)
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,您不需要1,1作为参数,因为这些是默认值.

  • 挤压=假有很大的不同! (3认同)