我刚开始使用 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()