Matplotlib传奇中的自定义艺术家

时间:2013-02-23 19:45:36

标签: python qt matplotlib pyqt

我有一个使用PtQt的程序,它利用matplotlib做一些绘图渲染。为了保存图像,我想利用图例来渲染自定义图像(此外,内置的可拖动功能使其非常吸引人)。我正在阅读传说,但我似乎无法弄清楚如何制作一个传说,为Qt调用我自己的paintEvent()方法,我可以在其中渲染自定义图像。

如果这种方法很糟糕,这就是我的目标:我想在绘图窗口内放置一个图像(通过Qt在程序中渲染)或者找到一种方法将这个图像附加到导出的图形之上。

以下是现在输出结果的截图:

我想把DAIP ...序列放在顶部,然后用图输出。

希望以前有人解决了类似的问题。

1 个答案:

答案 0 :(得分:1)

我在将图像保存到临时png文件后,使用matplotlib的OffsetImage和AnnotationBBox功能解决了这个问题。出于某种原因,将其保存为临时文件并不能正常工作。

简言之:

#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)