2013-02-23 79 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)