我正在尝试生成一页中包含多个图形的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)
有人知道如何解决这个问题吗?我需要这样进行,因为我需要绘图功能独立于其他目的。制作子图意味着改变这种结构,并且会使代码的通用性降低。
提前谢谢!
答案 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,这可能很麻烦。
否则,您能否详细说明为什么使用子图无法使用您的功能?也许有一种方法可以使用子图,但是您需要向我们展示代码。