matplotlib 子图 - IndexError:数组的索引太多

Tao*_*Tao 0 python matplotlib subplot

我正在使用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()
Run Code Online (Sandbox Code Playgroud)

She*_*ore 6

您的代码有两个问题:

  • 首先,您正在定义subplots()错误的 for 循环内部。你应该只在外面定义一次。
  • 其次,您需要使用axes[num]而不是axes[num, 0]引用特定的子图,因为您只有一列,这就是为什么您获得> IndexError. 索引axes[num, 0]axes[num, 1]如果你有超过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()
Run Code Online (Sandbox Code Playgroud)

使用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()
Run Code Online (Sandbox Code Playgroud)