【问题标题】:How do I stack multiple subplots (10+ subplots)如何堆叠多个子图(10 多个子图)
【发布时间】:2020-01-20 16:18:33
【问题描述】:

目前我正在尝试绘制 57 个图表。每个图有两个数据集。我试图弄清楚如何绘制它们并将它们堆叠起来,但是似乎如果我点击 3 个子图,我会得到 ​​p>

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

【问题讨论】:

  • 如果您使用subplot(2,1,i),那么只有两个子图“插槽”可用。见subplot
  • 是的,你明白了,我滥用了子图,谢谢你让我直截了当!

标签: python matplotlib


【解决方案1】:

subplot 函数使用 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 是您当前进行的迭代次数。让我知道它是否适合您,如果我误解了您想要实现的目标。

干杯

【讨论】:

  • 谢谢,我误用了子图。我还将检查您的代码 sn-p 看看它是否可以进一步帮助我目前的情况。
猜你喜欢
  • 2020-09-26
  • 1970-01-01
  • 2021-04-07
  • 2020-12-19
  • 1970-01-01
  • 2022-08-12
  • 2019-09-01
  • 2012-11-30
  • 2023-04-06
相关资源
最近更新 更多