Matplotlib:可变大小的子图?

时间:2016-02-21 19:47:18

标签: python dynamic matplotlib plot subplot

我有一个项目,我用matplotlib绘制和保存数字。由于项目本身工作完美,我最近开始重构,但有一个问题,我还没有找到一个好的解决方案。为了拆分实现和日志记录,我编写了一个日志类,它将数据传递给绘图类,在那里我遇到了一个问题:在运行时之前我不知道在一个记录图/图中将存在多少个子图

因此,在重构之前,我有很多不同的绘图函数和许多if语句。现在我想将所有这些内容传递给我的绘图课......但我目前还不知道绘图类应该如何处理这些数据。

事先我有这样的事情(这里: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,......子图创建类似6种不同的方法,但之后我再次重复。

我可以以某种方式创建缓冲区在循环中动态添加子图或类似的内容吗?

还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

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)