Python-一页中包含多个图形的Pdf文件(不包含子图!)

时间:2020-01-03 15:26:50

标签: python-3.x matplotlib

我正在尝试生成一页中包含多个图形的pdf文件(带有import concurrent.futures import time def do_something(seconds): print(f' Sleeping {seconds} seconds') time.sleep(seconds) return f'Done Sleeping {seconds}' with concurrent.futures.ProcessPoolExecutor() as executor: f1 = executor.submit(do_something, 1) print(f1.result()) )。

最明显的解决方案是使用子图。但是,在我的情况下这是不可能的,因为每个图都是由不同的函数生成的。例如,有一个函数PdfFile将绘制概率分布函数(PDF),而另一个函数def plotPDF(inputData)将绘制一个累积分布函数(CDF)。我的代码包含多达20个不同的函数,这些函数在调用时会产生不同的图。

我要做的是选择其中一些图并生成一个pdf文件,这些图包含在同一页面中。以PDF和CDF的示例为例,我想生成一个pdf文件,该文件包含一页,两个图彼此相邻(与子图类似)。

我尝试使用子图来执行此操作,但是无法直接在子图中调用该函数。也就是说,以下代码不起作用:

def plotCDF(inputData)

有人知道如何解决这个问题吗?我需要这样进行,因为我需要绘图功能独立于其他目的。制作子图意味着改变这种结构,并且会使代码的通用性降低。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

我不知道是否有一种方法可以完成您要问的事情,也许其他人会知道...

但是

recommended way编写绘图函数是将对Axes对象的引用传递给该函数,然后编写函数以使用该轴进行绘图。

所以在您的情况下:

def plotPDF(data, ax=None):
    ax = ax or plt.gca() # if no axes, use current axes
    plt.sca(ax) # set axes as current axes (important if you are using the pyplot API)
    # the rest of the function goes here

def plotCDF(data, ax=None):
    ax = ax or plt.gca()
    plt.sca(ax)
    (...)


fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2)
plotPDF(inputData, ax=ax1)
plotCDF(inputData, ax=ax2)
plt.show()

答案 1 :(得分:0)

您阅读过类似文章的https://github.com/kizitonwose/CalendarView吗?据我所知,该帖子中的答案包含将图像保存为pdf文件的多种方法,据我所知,只有一个(matplotlib后端)需要子图。

您还可以将文件另存为png文件,然后使用LaTeX / Word /另一种原始方式将它们排列为pdf,这可能很麻烦。

否则,您能否详细说明为什么使用子图无法使用您的功能?也许有一种方法可以使用子图,但是您需要向我们展示代码。