【问题标题】:Matplotlib with a single subplot带有单个子图的 Matplotlib
【发布时间】:2020-05-16 23:04:14
【问题描述】:

我正在子图中绘制熊猫数据框的列。要绘制的列存储在数组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)

但它失败并出现错误

TypeError: 'AxesSubplot' 对象不可下标

如果len(an)==1.

如果只有一个情节要绘制,是否可以使子情节起作用,还是我必须用if单独处理这种情况?

【问题讨论】:

标签: python pandas matplotlib


【解决方案1】:

根据matplotlib的文档,参数“squeeze”解决了你的问题:

squeeze:bool,可选,默认:True

  • 如果为 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)

【讨论】:

  • 谢谢。我交换了索引以垂直堆叠图,但您的解决方案完美运行。所以我有:fig, axs = plt.subplots(len(an),1,squeeze=False) 和`gd.plot(ax=axs[index,0],x="Date",y=item)`。
  • 欢迎您@user1583209。作为一个友好的提醒。如果我的回答解决了您的问题,请单击大复选框将其标记为已接受的答案。它不仅对我有帮助,对将来可能有类似问题的其他用户也有帮助。
猜你喜欢
  • 2018-01-08
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2018-04-13
  • 1970-01-01
  • 2017-02-06
相关资源
最近更新 更多