Ошибка при циклировании для создания подзаголовков

У меня вопрос о ошибке, которую я получаю при циклировании для построения нескольких подзадач из фрейма данных.

В моем кадре данных много столбцов, из которых я перебираю, чтобы иметь подзаголовок каждого столбца.

Это мой код

def plot(df): channels=[] for i in df: channels.append(i) fig, ax = plt.subplots(len(channels), sharex=True, figsize=(50,100)) plot=0 for j in df: ax[plot].plot(df["%s" % j]) ax[plot].set_xlabel('%s' % j) plot=plot+1 plt.tight_layout() plt.show() 

Я получаю сюжет, созданный отлично, но также пустой кадр и ошибка:

 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 538, in runfile execfile(filename, namespace) File "C:/Users/AClayton/Desktop/Data/TS.py", line 67, in <module> plot(all_data) File "C:/Users/AClayton/Desktop/Data/TS.py", line 49, in plot ax[plot].plot(reader["%s" % j]) TypeError: 'AxesSubplot' object does not support indexing 

Я не вижу, откуда эта ошибка возникает, если первый график получается мелким или почему создается вторая цифра?

Спасибо за понимание

One Solution collect form web for “Ошибка при циклировании для создания подзаголовков”

Если вы создаете несколько подсетей, plt.subplots() возвращает оси в массиве, этот массив позволяет индексировать, как вы делаете с ax[plot] . Когда создается только 1 subplot, по умолчанию он возвращает сами оси, а не оси в массиве.

Таким образом, ваша ошибка возникает, когда len(channels) равны 1. Вы можете подавить это поведение, установив squeeze=False в команде .subplots() . Это заставляет его всегда возвращать массив размеров «Строки x Cols» с осями, даже если он один.

Так:

  def plot(df): channels=[] for i in df: channels.append(i) fig, ax = plt.subplots(len(channels),1, sharex=True, figsize=(50,100), squeeze=False) plot=0 for j in df: ax[plot,0].plot(df["%s" % j]) ax[plot,0].set_xlabel('%s' % j) plot=plot+1 plt.tight_layout() plt.show() 

Добавляя ключевое слово squeeze вы всегда получаете 2D-массив в обратном направлении, поэтому индексирование для подзаголовка изменяется на ax[plot,0] . Я также специально добавил количество столбцов (в этом случае 1).

  • Сохранить параметры фигуры после интерактивной настройки
  • Расширить графики python до полноэкранного режима
  • Как построить y = 1 / x в виде единого графика
  • Общая xlabel / ylabel для подзаголовков matplotlib
  • python matplotlib dash-dot-dot - как?
  • Настройка аннотации с помощью FacetGrid от Seaborn
  • Возможно ли наложение 3-х гистограмм в matplotlib?
  • Python, строящий 3D-точки с аннотацией
  • Python - лучший язык программирования в мире.