计算子图调整

Calculate subplot adjustment

所以我计算了一些数据,现在应该可视化了。对于每个数据元素,我想放置一个单独的子图,以便整个图尽可能紧凑。下面是五个元素的示例:

这是我为任意元素数想出的原型:

import matplotlib.pyplot as plt
import numpy as np
import math

data = ... # some list of pairs of numpy arrays, for x and y axes
size = len(data)
cols = math.floor(math.sqrt(size))
rows = math.ceil(size / cols)

f, diags = plt.subplots(rows, cols)

for (row, col), diag in np.ndenumerate(diags):
    dataIdx = row * cols + col
    if dataIdx < size:
        x = data[dataIdx][0]
        y = data[dataIdx][1]
        diag.scatter(x, y)
        diag.set_title('Regressor {}'.format(dataIdx + 1))
    else: # discard empty subplots
        f.delaxes(diag)
f.show()

一个简短的解释:为了紧凑,我正在尝试尽可能以方阵的形式调整绘图。如果没有,我为剩余的图表添加另一行。然后我迭代图表,计算数据元素的相应位置并绘制其值。如果没有找到图表的数据元素,则表示该图表是最后一行的余数,可以丢弃。

然而,这是我可能会用 C++ 或 Java 编写的代码,问题是,pythonic 方式是什么?

另外,当遍历数据而不是图表时,最好的解决方案是什么?我当然可以像在初始 rows/columns 计算中那样从元素索引计算图表的 row/column,但也许有更好的方法来做到这一点...

提前致谢!

我可能会像这样创建情节:

size = len(data)
cols = round(math.sqrt(size))
rows = cols
while rows * cols < size:
    rows += 1
f, ax_arr = plt.subplots(rows, cols)
ax_arr = ax_arr.reshape(-1)
for i in range(len(ax_arr)):
    if i >= size:
        ax_arr[i].axis('off')
    x = data[i][0]
    y = data[i][1]
    ax_arr[i].scatter(x,y)