我正在使用Python 3和Flap与Matplotlib和numpy。将生成的Matplotlib图插入到python3的Flask中
我希望加载生成许多嵌入页面的图的页面。
我尝试了其他地方提出的建议,例如stackoverflow question和github post。
但是,当我试图实现任何类型的东西时,我会得到各种与IO有关的错误。的一般形式:
TypeError: string argument expected, got 'bytes'
并且内部产生:
site-packages/matplotlib/backends/backend_agg.py
具体地说print_png
功能
我明白python3不再具有StringIO import
,其什么正在产生误差,相反,我们将import io
并与io.StringIO()
打电话 - 至少这是我明白我们要做的,但是,我似乎无法得到任何我发现工作的例子。
我的示例的结构几乎与上面列出的stackoverflow问题的结构相同。页面会像图像路线一样生成。只有图像生成本身失败。
如果有人有更好的主意,我很乐意尝试不同的策略。为了清楚起见,我需要从数据库中的数据中生成一些图表 - 多达100多次(在任何单页和数百页上),并将它们显示在网页上。我希望避免生成文件,然后我必须清理,因为我可能会生成大量文件,并且可能会随着数据库中的数据更改而变化。
此错误意味着您必须使用'utf-8'或其他编码将字节'decode()'转换为字符串。问题是因为在Python2中'str'和'bytes'没有区别。 Python3使用'unicode'作为'str'。 – furas
是的,但是其中的错误在matplotlib包内。我对它的访问是在'savefig(img)'调用中,我无法将其解码为字符串。我认为问题在于它之前的'img = io.StringIO()'行,但我不知道如何创建一个对象来保存图形并传递回渲染引擎。 – raf
它是'img = io.StringIO()'行应该是'img = io.BytesIO()' – raf