2013-02-23 98 views
1

我有一个使用PtQt的程序,它利用matplotlib来做一些绘图。为了保存图像,我想利用图例来渲染自定义图像(另外,内置的可拖动功能使其非常吸引人)。我正在阅读这个图例,但我似乎无法弄清楚如何制作一个图例来调用我自己的paintEvent()方法来为Qt渲染自定义图像。如果这种方法很糟糕,这里是我的目标:我想在图形窗口内部放置一个图像(由Qt在程序内部渲染),或者找到一种方法将这个图像添加到导出图形的顶部。Matplotlib中的自定义艺术家图例

这里的输出是什么样子,现在的截图:

我想借此在顶部DAIP ...序列,并有出口与人物。

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

+0

截图失踪。听起来像你只是想在图中的图像,对吗?请问http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.figimage有诀窍吗? – pelson 2013-02-25 09:40:05

回答

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) 
相关问题