Matplotlib:子图的大小可变?

Matplotlib: variable size of subplots?

我有一个项目,我用 matplotlib 绘制和保存图形。由于项目本身运行良好,我最近开始重构,但有一个问题我还没有找到好的解决方案。为了拆分实现和日志记录,我写了一个日志记录 class 将数据传递给绘图 class 并且我遇到了一个问题:before runtime 我不知道有多少子图将存在于一个记录 plot/figure.

所以,在重构之前我有很多不同的绘图函数和很多 if 语句。现在我想将所有这些东西传递给我的绘图 class...但是我现在不知道绘图 class 应该如何处理这些数据。

之前我有这样的东西(这里:4个子图):

f, axarr = plt.subplots(2, 2)

axarr[0, 0].set_title("original image")
axarr[0, 0].imshow(oimg, interpolation="none", cmap="gray")

axarr[0, 1].set_title("cost data") 
axarr[0, 1].plot(cost_data, ...)
(...)

当然,我可以在为 1、2、3、... 子图绘制 class 时创建类似 6 种不同的方法,但随后我又在那里重复了。

我能否以某种方式创建一个 缓冲区 在循环中动态添加一个子图 或类似的东西?

还有其他想法吗?

def plotA(ax, data):
    pass

def plotB(ax, data):
    pass

def dispatcher(data, list_of_plot_types):
    function_map = {'A': plotA, 'B': plotB}
    fig, list_of_axes = plt.subplots(1, len(list_of_plot_types))

    for ax, plot_type in zip(list_of_axes, list_of_plot_types):
        function_map[plot_type](ax, data)