带有单个子图的 Matplotlib

use*_*209 3 python matplotlib pandas

我正在子图中绘制熊猫数据框的列。要绘制的列存储在数组中an。下面的代码工作正常,如果len(an)>1,即如果我绘制多个图形,

    fig, axs = plt.subplots(len(an))
    for index, item in enumerate(an, start=0):
        gd.plot(ax=axs[index],x="Date",y=item)
Run Code Online (Sandbox Code Playgroud)

但它因错误而失败

类型错误:“AxesSubplot”对象不可下标

如果len(an)==1

如果只有一个情节要绘制,是否可以使子图工作,或者我是否必须用if?

小智 6

根据 matplotlib 的文档,参数“squeeze”可以解决您的问题:

挤压:布尔,可选,默认值:真

  • 如果为 True,则从返回的 Axes 数组中挤出额外的维度:
    • 如果仅构造一个子图 (nrows=ncols=1),则生成的单个 Axes 对象将作为标量返回。
    • 对于 Nx1 或 1xM 子图,返回的对象是 Axes 对象的一维 numpy 对象数组。
    • 对于 NxM,N>1 和 M>1 的子图作为二维数组返回。
  • 如果为 False,则根本不进行压缩:返回的 Axes 对象始终是包含 Axes 实例的二维数组,即使它最终是 1x1。

因此,您的问题的解决方案是:

fig, axs = plt.subplots(1,len(an),squeeze=False)
for index, item in enumerate(an, start=0):
    gd.plot(ax=axs[0,index],x="Date",y=item)
Run Code Online (Sandbox Code Playgroud)