渲染pandas生成的绘图到matplotlib画布用于流式传输

时间:2012-10-20 00:38:18

标签: python matplotlib pandas

我正在尝试流式传输通过pandas df.plot()方法生成的matplotlib,但无法在matplotlib画布上渲染图像。

这就是我正在做的事情

import cStringIO
import matplotlib.pyplot as plt
import pandas
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas


labels = ['a', 'b', 'c', 'd', 'e']
s = pandas.Series(np.random.randn(5), index=labels)


fig = plt.figure()
s.plot()
canvas = FigureCanvas(fig)
output = cStringIO.StringIO()
canvas.print_png(output)

fh=open('check.png','w')
fh.write(output.getvalue())

check.png结果是空白的。我想我无法将pandas plot函数生成的绘图渲染到画布。

第二次尝试:查看轴但没有数据

import cStringIO
import matplotlib.pyplot as plt
import pandas
import numpy as np
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas

labels = ['a', 'b', 'c', 'd', 'e']
s = pandas.Series(np.random.randn(5), index=labels)


fig = plt.figure()
ax = fig.add_subplot(111)
s.plot(ax=ax)
canvas = FigureCanvas(fig)
output = cStringIO.StringIO()
canvas.print_png(output)


fh=open('check.png','w')
fh.write(output.getvalue())

谢谢! -Abhi

1 个答案:

答案 0 :(得分:1)

你有什么没关系,但如果你正在使用Windows机器,你必须以二进制模式编写文件:

fh=open('check.png','wb')

此外,写完后关闭文件:

fh.close()

上面的代码与这些小调整相结合,可以在我的机器上保存一个可读的.png。