目前,我正在尝试绘制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
答案 0 :(得分:0)
子图函数使用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
是您当前进行的迭代次数。让我知道它是否对您有用,是否误解了您想实现的目标。
欢呼