Matplotlib Legend 中的自定义艺术家

Posted

技术标签:

【中文标题】Matplotlib Legend 中的自定义艺术家【英文标题】:Custom Artist In Matplotlib Legend 【发布时间】:2013-02-23 19:45:36 【问题描述】:

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

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

这是现在输出的截图:

我想将 DAIP... 序列放在顶部,并将其与图形一起导出。

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

【问题讨论】:

缺少屏幕截图。听起来你只想要图中的图像,对吧? matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.figimage 能解决问题吗? 【参考方案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)

【讨论】:

以上是关于Matplotlib Legend 中的自定义艺术家的主要内容,如果未能解决你的问题,请参考以下文章

python使用matplotlib可视化为可视化图像添加图例(legend)自定义图例的字体格式字体大小字体颜色等

Google Colaboratory matplotlib 图表中的自定义字体

matplotlib 进阶之Legend guide

matplotlib中的legend()——用于显示图例

matplotlib-legend()中loc的用法

python使用matplotlib可视化线图(line plot)将可视化图像的图例(legend)放置在自定义指定位置,使用loc参数和bbox_to_anchor参数