如何在Plone中使用matplotlib

如何在Plone中使用matplotlib,matplotlib,plone,Matplotlib,Plone,我将Plone 4.3与matplotlib一起使用。我有打印窗口,但我想在页面模板中呈现打印窗口。一些人建议我使用HTML5canvas在模板页面中呈现绘图窗口。但我无法理解这个概念。因此,任何人都可以帮助我?创建浏览器视图,设置标题类型,并返回图像数据,例如 from zope.publisher.browser import BrowserPage class PloneMatPlotLib(BrowserPage): """ """ def __call__

我将Plone 4.3与matplotlib一起使用。我有打印窗口,但我想在页面模板中呈现打印窗口。一些人建议我使用HTML5
canvas
在模板页面中呈现绘图窗口。但我无法理解这个概念。因此,任何人都可以帮助我?

创建浏览器视图,设置标题类型,并返回图像数据,例如

from zope.publisher.browser import BrowserPage


class PloneMatPlotLib(BrowserPage):
    """
    """

    def __call__(self):

        import cStringIO
        from matplotlib.figure import Figure
        from matplotlib.backends.backend_agg import FigureCanvasAgg

        x, y = 4, 4

        fig = Figure(figsize=[x, y])
        ax = fig.add_axes([.1, .1, .8, .8])
        ax.scatter([1, 2], [3, 4])
        canvas = FigureCanvasAgg(fig)

        # write image data to a string buffer and get the PNG image bytes
        buf = cStringIO.StringIO()
        canvas.print_png(buf)
        data = buf.getvalue()

        # write image bytes back to the browser
        self.request.response.setHeader("Content-type", "image/png")
        return data
然后,您可以调用此视图TTW(通过web)以获取图像,例如
http://localhost:8080/Plone/@@plone_matplotlib
。或在页面模板中,例如:

<div metal:use-macro="here/main_template/macros/master">
    <div metal:fill-slot="main">
       <img tal:attributes="src python:context.absolute_url() + '/@@plone_matplotlib'">
    </div>
</div>

详情如下:


没问题!希望它能帮助您在不在浏览器页面中的图像上画一条线,我想如果我使用jquery从浏览器页面获得鼠标点值,这意味着这是一种可能的画线方法。但是我不能在pt页面中运行任何JavaScript脚本文件,我可以调用这个视图TTW(通过web)来获取图像,例如。但我无法使用页面模板显示图像。为什么不能?您应该能够:-)