вспомогательные участки matplotlib - IndexError: слишком много индексов для массива - PullRequest
0 голосов
/ 13 января 2019

Я строю 8 столбцов на одной фигуре, используя функцию subplots. Тем не менее, он показывает

"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()

1 Ответ

0 голосов
/ 13 января 2019

Есть две проблемы с вашим кодом:

  • Во-первых, вы определяете 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()

Альтернатива с использованием 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()
...