【问题标题】:matplotlib subplots - IndexError: too many indices for arraymatplotlib 子图 - IndexError:数组索引过多
【发布时间】:2019-06-07 18:50:17
【问题描述】:

我正在使用subplots 函数将 8 列绘制成一个图形。但是,它显示了

"IndexError: 数组索引过多"

# -*- coding: utf-8 -*-
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import style

df = pd.read_csv('XXXX', encoding='utf-8')

num = 0

for dim in ['A','B','C','D','E','F','G','H']:
    fig, axes = plt.subplots(nrows=8, ncols=1)
    df[dim].plot(ax=axes[num,0])
    plt.xlabel(dim)
    num += 1

plt.show()

【问题讨论】:

  • 能否在您的问题中显示df.head(),以便我们有一个最小、完整且可验证的示例?

标签: python matplotlib subplot


【解决方案1】:

你的代码有两个问题:

  • 首先,您在 for 循环中定义了 subplots(),这是错误的。您应该只在外面定义一次。
  • 其次,您需要使用axes[num] 而不是axes[num, 0] 来引用特定的子图,因为您只有一个列,这就是您获得> IndexError 的原因。如果您有超过 1 列,则索引 axes[num, 0]axes[num, 1] 等将起作用。

解决方案

# import commands here 

df = pd.read_csv('XXXX', encoding='utf-8')
num = 0

fig, axes = plt.subplots(nrows=8, ncols=1) # <---moved outside for loop

for dim in ['A','B','C','D','E','F','G','H']:
    df[dim].plot(ax=axes[num])
    plt.xlabel(dim)
    num += 1
plt.show()

替代使用enumerate 摆脱num 变量

fig, axes = plt.subplots(nrows=8, ncols=1)

for i, dim in enumerate(['A','B','C','D','E','F','G','H']):
    df[dim].plot(ax=axes[i])
    plt.xlabel(dim)
plt.show()

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2019-07-17
    • 2020-09-14
    • 2018-05-23
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多