python - matplotlib 子图 - IndexError:数组索引过多
问题描述
我正在使用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()
解决方案
您的代码有两个问题:
- 首先,您正在定义
subplots()
错误的 for 循环内部。您应该只在外面定义一次。 - 其次,您需要使用
axes[num]
而不是axes[num, 0]
引用特定的子图,因为您只有一列,这就是您获得> IndexError
. 如果您有超过 1 列,则 indexing 等将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()
推荐阅读
- angular - 如何在角度中实现setdisabledstate文本框的点击事件
- node.js - 如何使用批处理脚本连接 mongodb 远程服务器
- node.js - 处理 multer 抛出的错误
- java - 如何找到偶数然后添加它们 - JAVA
- c# - 使用 EF Core 2.2、Npgsql 和 NetTopologySuite 映射几何图形
- java - 如何计算片段中的pdf页面
- excel - 如果列不为空,则循环遍历列表框行复制粘贴到工作表中的空行
- c# - 如何使用不同的检查使用密钥对 Web 服务中的用户进行身份验证
- angular - 如何在 Angular 6 中最小化反应式表单验证脚本
- wxpython - 使用 wxPython 和 CEFPython 的具有多个选项卡的 Web 浏览器在 Windows 10 上不起作用