Как мне составить несколько субплотов (10+ субплотов) - PullRequest
0 голосов
/ 19 сентября 2019

В настоящее время я пытаюсь построить 57 графиков.Каждый график имеет два набора данных.Я пытаюсь выяснить, как построить их и сложить, но, кажется, что если я наберу 3 субплота, я получу

ValueError: num must be 1 <= num <= 2, not 3

Так что может показаться, что существует какое-то ограничение на количество разрешенных участков?Есть ли другой способ, которым я могу сделать это?

    for k, v in tests.items():
    print("Building graphs for " + str(k))
    i = 1
    while i <= v:
        print("Building graph for Config " + str(i))
        cur.execute('Select Iteration, Download, Upload From Ookla_Client where Config = ' + str(i) + ';')
        db_return = cur.fetchall()
        x = []
        for test in db_return:
            x.append(test[0])
        y = []
        for test in db_return:
            y.append(test[1])
        y2 = []
        for test in db_return:
            y2.append(test[2])
        plt.subplot(2,1,i)
        plt.plot(x,y,'.-')
        plt.plot(x,y2,'.-')
        plt.title('Config 1')
        plt.xlabel('Test')
        plt.ylabel('Mb/s')
        plt.legend(['Download', 'Upload'], loc='upper right')
        plt.grid()
        i += 1

1 Ответ

0 голосов
/ 19 сентября 2019

Функция субплота использует 3 параметра: subplot(x,y,n), где x - это количество строк, y - количество столбцов и n - позиция вашего текущего графика.Таким образом, используя subplot(2, 1, i), вы сообщаете Matplotlib, что вам нужно 2 вспомогательных участка (один над другим).То, что вы хотите сделать, это либо ввести значение вручную, чтобы получить сетку.Тогда я создал функцию для автоматического вычисления оптимальных значений x и y, чтобы иметь квадратное отображение (или то, что было бы ближе к квадрату):

size = len(my_array_of_values)

final_x = 0

for i in range(10):
    if pow(i,2) < size:
        final_x += 1

final_y = ceil(size / final_x)

fig, axs = plt.subplots(final_y, final_x, sharex=False, sharey=False)

Тогда выполучит доступ к вашему другому подзаговору, используя это: current_axis = axs[floor(i/final_x)][i%final_x], i - это число итераций, которые вы в данный момент сделали.Дайте мне знать, если это работает для вас, или если я неправильно понял, чего вы хотели достичь.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...