首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matplotlib图为PDF格式,无需保存

Matplotlib图为PDF格式,无需保存
EN

Stack Overflow用户
提问于 2015-09-16 12:08:57
回答 3查看 2.6K关注 0票数 2

我必须创建一组matplotlib图形,我想在PDF报告中直接显示这些数据,而不将它们保存为文件。

我的地块的数据存储在Pandas DataFrame中:

现在,我不知道其他更好的选择,而不是首先保存图像,然后使用它。

我正在做这样的事情:

代码语言:javascript
运行
复制
import matplotlib.pylab as plt
from reportlab.platypus import BaseDocTemplate, Image

for index, row in myDataFrame.iterrows():
    fig = plt.figure()
    plt.plot(row['Xvalues'], row['Yvalues'],'o', color='r')
    fig.savefig('figure_%s.png' % (row['ID']))
    plt.close(fig)

text = []
doc = BaseDocTemplate(pageName, pagesize=landscape(A4))

for f in listdir(myFolder):
    if f.endswith('png'):
        image1 = Image(f)
        text.append(image1)

doc.build(text)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-16 12:40:45

以下是matplotlib本身提供的最佳解决方案:

代码语言:javascript
运行
复制
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt

with PdfPages('foo.pdf') as pdf:
    #As many times as you like, create a figure fig and save it:
    fig = plt.figure()
    pdf.savefig(fig)

    ....
    fig = plt.figure()
    pdf.savefig(fig) 

瓦利亚

在这里找到一个完整的例子:多页pdf matplotlib

票数 2
EN

Stack Overflow用户

发布于 2015-09-16 12:34:36

我认为您可以使用io.BytessIO将图形保存到缓冲区中,然后在鸭嘴兽中使用。也许是这样的?

代码语言:javascript
运行
复制
import io
import matplotlib.pylab as plt
from reportlab.platypus import BaseDocTemplate, Image

buffers = []

for index, row in myDataFrame.iterrows():
    fig = plt.figure()
    plt.plot(row['Xvalues'], row['Yvalues'],'o', color='r')

    mybuffer = io.BytesIO()
    fig.savefig(mybuffer, format = 'pdf')
    mybuffer.seek(0)
    buffers.append(mybuffer)
    plt.close(fig)

text = []
doc = BaseDocTemplate(pageName, pagesize=landscape(A4))

doc.build(buffers)
票数 1
EN

Stack Overflow用户

发布于 2019-09-16 11:49:01

使用我的包autobasedoc https://pypi.org/project/autobasedoc/,您的示例如下所示:

代码语言:javascript
运行
复制
from autobasedoc import autorpt as ar
from autobasedoc import autoplot as ap

@ap.autoPdfImg
def my_plot(index, row, canvaswidth=5): #[inch]
    fig, ax = ap.plt.subplots(figsize=(canvaswidth,canvaswidth))
    fig.suptitle(f"My simple plot {index}", fontproperties=fontprop)
    ax.plot(row['Xvalues'], row['Yvalues'],label=f"legendlabel{index}")
    return fig

doc = ar.AutoDocTemplate(pageName)

content = []

for index, row in myDataFrame.iterrows():
    content.append(my_plot(index, row))

doc.build(content)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32608199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档