python - Matplotlib 图例中的自定义艺术家

标签 python qt matplotlib pyqt

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

如果这种方法很糟糕,我的目标是:我想将图像(由 Qt 在程序内渲染)放在绘图窗口内,或者找到一种方法将此图像附加到导出的图形顶部。

这是现在输出的屏幕截图:

我想采用顶部的 DAIP... 序列并将其与图形一起导出。

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

最佳答案

将图像保存到临时 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)

关于python - Matplotlib 图例中的自定义艺术家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044822/

相关文章:

python - 图像未转换为灰度

Python:Plotly 3D 曲面图

python - 如何计算两个文本文档之间的相似度?

python - Numpy:在每行上查找元素的列索引

c++ - Qt:找不到体系结构 x86_64 的符号

c++ - 清除 QGraphicsItem::paint 生成的 "unused parameter ' 小部件'"警告的清洁方法

python - Pandas/matplotlib 将 2018 年和 2019 年显示为 48 和 49

javascript - 仅前端的 Electron

python - 如何访问(获取或设置)给定与该属性名称对应的字符串的对象属性

c++ - 将 UTC 中的 QDateTime 转换为本地系统时间