Matplotlib 图例中的自定义艺术家
我有一个程序,使用PtQt来配合matplotlib进行图形绘制。为了保存图像,我想利用图例来渲染一个自定义的图像(而且内置的可拖动功能也让我觉得很吸引人)。我在研究图例的相关内容,但我似乎找不到办法让图例调用我自己的paintEvent()方法,这样我就可以渲染自定义的图像了。
如果这个方法不太好,那我想说一下我的目标:我想把一个图像(在程序中通过Qt渲染的)放到绘图窗口里,或者找到一种方法把这个图像加到导出的图形上面。
这是现在输出结果的截图:
我希望把顶部的DAIP...序列也导出到图形中。
希望有人之前遇到过类似的问题。
1 个回答
1
我通过使用matplotlib中的OffsetImage和AnnotationBBox功能解决了这个问题,先把图片保存为一个临时的png文件。出于某种原因,把它保持为临时文件效果不好。
简单来说:
#draw stuff onto QPixmap named pix
byteArray = QByteArray()
buffer = QBuffer(byteArray)
buffer.open(QIODevice.WriteOnly)
pix.save(buffer, 'PNG')
stringIO = StringIO(byteArray)
stringIO.seek(0)
tfile = tempfile.NamedTemporaryFile(suffix=".png", mode="wb", delete=False)
tfile.write(stringIO.buf)
tfile.close()
imagebox = mpl.offsetbox.OffsetImage(mpl._png.read_png(tfile.name),zoom=zlvl)
ab = mpl.offsetbox.AnnotationBbox(imagebox, [w/2,0],frameon=False)
ab.set_figure(self.canvas.figure)
ab.draggable()
self.subplot.axes.add_artist(ab)
os.remove(tfile.name)