Итеративное добавление подзаговоров в matplotlib с неизвестным общим числом - PullRequest
0 голосов
/ 08 октября 2018

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

for field in data.keys():
    if field.startswith('Header'):
        for subheading in data.get(field):
            for index, answer in data.get(field).get(subheading).get('Directory').items():
                if answer=='yes':
                   axes.plot(index, seconddataset[subheading]...

Я хочу создать отдельный субплот для каждой итерации полного цикла, предпочтительно расположенный в одном столбце (у меня есть другойиспользует для других столбцов).Если бы я знал общее количество экземпляров, которые я получу из цикла, то я мог бы просто использовать plt.subplots(rows, columns) и индексировать каждый экземпляр с помощью axes[row,column].plot(...).Когда я пробую fig.add_subplot методы, я продолжаю получать вложенные участки, которые накладываются друг на друга во вложенном порядке - вспомогательные участки не обновляют свои местоположения, чтобы отражать фигуру, которая увеличивается с каждой итерацией цикла.

Возможно, это плохая практика кода, поэтому у меня также есть версия, где я собираю общее количество записей, просто подсчитывая количество ответов 'yes' при переборе словарей, а затем используя это число с plt.subplots(rows,columns) стратегия выше.Чтобы сделать это, я должен написать этот условный вложенный цикл и повторить его во второй раз (один раз, чтобы получить итоговое значение, затем снова нарисовать подзаговоры), но это также кажется неэффективным.

1 Ответ

0 голосов
/ 08 октября 2018

Иногда написание вашего вопроса дает вам ответ.Я напишу мое здесь, если у кого-то есть комментарий или у меня есть подобный вопрос.При переборе вложенного словаря, помимо подсчета / сбора терминала answers, я также собираю переменные, которые мне понадобятся позже для построения графиков, и добавляю их в списки.

for field in data.keys():
    if field.startswith('Header'):
        for subheading in data.get(field):
            for index, answer in data.get(field).get(subheading).get('Directory').items():
                if answer=='yes':
                    subheading_list.append(subheading)
                    index_list.append(index)

fig,axes = plt.subplots(len(index_list),3)
for i in range (0,len(index_list)):
    axes[i,0].plot(index_list[i], seconddataset[subheading_list[i]]...
...