python - 如何将 matplotlib 路径对象转换为位图?

标签 python graphics matplotlib renderer

我有一个 matplotlib.path.Path 对象。如何将其渲染为位图(或具有颜色值的数组)。

我想我必须使用后端/渲染来绘制对象,但我该怎么做呢?

编辑:

大多数 matplotlib 的可绘制对象(标记、轴等)都是矢量格式。这些对象是 Path 的子类。我想将它们呈现为位图,换句话说,栅格化它们。

示例:我画了一个圆形标记“bo”。我需要做什么才能得到一个圆形标记的位图?我不能只画一个圆圈然后把它涂成蓝色。我想从绘图中获取任何标记并获取其位图。只有一个具有正确颜色、形状和大小以及所有其他属性的标记。此外,图中不应包含背景或前景或任何其他元素。这种情况类似于图例绘制其符号的方式。我怎么做?

最佳答案

这是一个如何让它工作的技巧。基本上创建一个空图形并将中心的路径绘制到该 Canvas 。然后将 Canvas 作为字符串获取。然后取该图形的中心。在我找到更好的解决方案之前,我会接受这一点。在下面的代码中,X 是一个包含栅格化符号的数组。下图显示了栅格化符号。 rasterized symbol

from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure
import numpy
import pylab

# create figure and draw symbol with three points
fig = Figure(figsize=(5,4), dpi=600)
ax = fig.add_subplot(111)
ax.plot([0,1,2],[0,0,0], '-o', mec='b', mfc='g')

# get canvas, draw and get as string
canvas = FigureCanvasAgg(fig)
canvas.draw()
s = canvas.tostring_rgb()  

# convert to array
l,b,w,h = fig.bbox.bounds
w, h = int(w), int(h)
X = numpy.fromstring(s, numpy.uint8)
X.shape = h, w, 3

# plot only the center as bitmap
pylab.imshow(X[h/2-50:h/2+50, w/2-0:w/2+80,:])
pylab.show()

关于python - 如何将 matplotlib 路径对象转换为位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24277857/

相关文章:

python - Selenium - 在 Python 中旋转标签

python - 打开 CV 或用于后处理识别的替代方法

python - Pandas :groupby 然后检索 IQR

python - Pandas DataFrame 图 : Permanently change default colormap

python - 来自数据帧的随机样本和剩余部分

c# - 双缓冲 C#

绘制ER图的Java图形二维库?

opengl - 现代 OpenGL 问题

python - 如何在 matplotlib mplot3D 或类似文件中显示 3D 数组等值面的 3D 图?

python - 为单个系列 pandas 堆叠条形图