如何在Pyglet窗口中嵌入Matplotlib绘图



我刚刚开始使用pyglet,我正在尝试使用gym为强化学习应用程序开发一个视觉渲染。

我需要整合与matplolib或其他东西生成的图形到我的窗口。我发现了一些示例代码,做我想要的,但它似乎不工作,因为python 3。

我在第15行声明并在第16行使用的io的StringIO类似乎有问题。我不确定它到底是什么。

import pyglet
import io
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg

def render_figure(fig):
w, h = fig.get_size_inches()
dpi_res = fig.get_dpi()
w, h = int(np.ceil(w * dpi_res)), int(np.ceil(h * dpi_res))
canvas = FigureCanvasAgg(fig)
pic_data = io.StringIO()
canvas.print_raw(pic_data, dpi=dpi_res)
return pyglet.image.ImageData(w, h, "RGBA", pic_data.getvalue(), -4 * w)

def draw_figure(fig):
X = np.linspace(-6, 6, 1024)
Y = np.sinc(X)
ax = fig.add_subplot(111)
ax.plot(X, Y, lw=2, color="k")

window = pyglet.window.Window(fullscreen=True)
dpi_res = min(window.width, window.height) / 10
fig = Figure((window.width / dpi_res, window.height / dpi_res), dpi=dpi_res)
draw_figure(fig)
image = render_figure(fig)

@window.event
def on_draw():
window.clear()
image.blit(0, 0)

pyglet.app.run()

您必须使用FigureCanvasAgg.print_to_buffer()方法:

def render_figure(fig):
canvas = FigureCanvasAgg(fig)
data, (w, h) = canvas.print_to_buffer()
return pyglet.image.ImageData(w, h, "RGBA", data, -4 * w)

相关内容

  • 没有找到相关文章

最新更新