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

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

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

Это мой код

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).

  • Anaconda: невозможно импортировать pylab
  • Как я рисую линейную регрессию
  • Как я могу получить значения (x, y) линии, которые построены на графике контура?
  • как построить линии тока, когда я знаю u и v компоненты скорости (numpy 2d массивы), используя программу построения графиков в python?
  • Скрыть контур linestroke на pyplot.contourf, чтобы получить только заливки
  • оси в графах рассеяния
  • понимание matplotlib.subplots python
  • Элегантное изменение цвета рамки сюжета в matplotlib
  • Различные шкалы x и y в увеличенной вставке, matplotlib
  • Не удалось сохранить matplotlib.figure Рисунок, холст None
  • Python threading - возврат управления терминалу при сохранении рамки
  • Python - лучший язык программирования в мире.