subplots () получил несколько значений для аргумента 'nrows' во время циклического прохождения по сюжетам - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать фрагмент кода, который позволяет мне oop пройти через столько вспомогательных участков, сколько мне нужно, с машины, которая выплевывает переменное количество данных. Иногда у меня будет несколько графиков, иногда у меня будет больше 30. Код, кажется, работает хорошо, за исключением того, что когда я запускаю его, мои графики всегда выглядят сжатыми. Когда я пытаюсь передать аргумент ncols или nrows в мой код, он говорит:

subplots () получил несколько значений для аргумента nrows при циклическом просмотре субплотов

Вот мой код :

conditions = 15 
colors = ['purple', 'blue', 'plum', 'green']
condition_names = ['One', 'Two', 'Three', 'Four']

rows=3
cols=5
fig, axes = plt.subplots(conditions, sharex=True, sharey=True, figsize=(18,25), nrows=rows, ncols=cols)



q = 0
c = 0
d = 0
total = len(En_cols)

try:
    for i in En_cols:
        q = q
        lines = En_cols
        axes[d].errorbar(data=En_means, x=Num_x_axis, y=En_means[lines[q]], yerr=En_devs[lines[q]], c=colors[c], ecolor=colors[c], capsize=5, marker='s',linestyle ='--', label=condition_names[c])
        q = q + conditions
        c = c + 1
        axes[d].errorbar(data=En_means, x=Num_x_axis, y=En_means[lines[q]], yerr=En_devs[lines[q]], c=colors[c], ecolor=colors[c], capsize=5, marker='s',linestyle ='--', label=condition_names[c])
        q = q + conditions
        c = c + 1
        axes[d].errorbar(data=En_means, x=Num_x_axis, y=En_means[lines[q]], yerr=En_devs[lines[q]], c=colors[c], ecolor=colors[c], capsize=5, marker='s',linestyle ='--', label=condition_names[c])
        q = q + conditions
        c = c + 1
        axes[d].errorbar(data=En_means, x=Num_x_axis, y=En_means[lines[q]], yerr=En_devs[lines[q]], c=colors[c], ecolor=colors[c], capsize=5, marker='s',linestyle ='--', label=condition_names[c])
        q = q + conditions
        c = c + 1

        c = 0 
        d = d + 1
        q = q + 1
        q = q - conditions*4
        continue
except IndexError:
        pass

Есть ли способ, которым я могу изменить свою фигуру, чтобы она не выглядела ужасно? Спасибо

1 Ответ

0 голосов
/ 30 января 2020

Вы не можете использовать оба conditions в качестве позиционного аргумента и nrows= в качестве аргумента ключевого слова, поэтому вы получаете эту ошибку.

Я предлагаю решить, сколько столбцов вы хотите (может быть пропорционально число условий), а затем вычисление количества строк

Обратите внимание, однако, что subplots() вернет двумерный массив осей. Но вы можете пройти его, как если бы это было 1D, используя axes.flatten()[i]

например:

import math

conditions = 16 
cols = 5
rows = math.ceil(conditions/cols)
fig, axes = plt.subplots(nrows=rows, ncols=cols, sharex=True, sharey=True)

enter image description here

...