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

时间:2014-06-18 05:45:32

标签: python graphics matplotlib renderer

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

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

修改

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

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

1 个答案:

答案 0 :(得分:2)

这是一个如何让它工作的黑客。基本上创建一个空图形并将中心的路径绘制到该画布。然后将画布作为字符串。然后取这个数字的中心。我会接受这个,直到找到更好的解决方案。在下面的代码中,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()