如何堆叠多个子图(10个以上的子图)

时间:2019-09-19 15:19:46

标签: python matplotlib

目前,我正在尝试绘制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 :(得分:0)

子图函数使用3个参数:subplot(x,y,n),其中x是行数,y是列数,n是当前图的位置。因此,通过使用subplot(2, 1, i),您告诉Matplotlib您需要2个子图(一个在另一个图上)。您要做的就是手动输入值以具有网格。当时我做了一个函数,可以自动计算xy的最优值,以显示正方形(或者最接近正方形的正方形):

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是您当前进行的迭代次数。让我知道它是否对您有用,是否误解了您想实现的目标。

欢呼