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

4
我有一个 matplotlib.path.Path 对象。如何将其呈现为位图(或带有颜色值的数组)。
我猜我必须使用后端/渲染器来绘制对象,但我该怎么做呢?
编辑:
大多数 matplotlib 的可绘制对象(标记、轴等)都是以矢量格式存在的。这些对象是 Path 的子类。我想将它们呈现为位图,换句话说,将它们转换为栅格化图像。
例如:我画了一个圆形标记 'bo'。我需要做什么才能得到一个圆形标记的位图?我不能只画一个蓝色的圆。我想获取绘图中的任何标记,并获得该标记的位图。只有那个正确的颜色、形状和大小以及所有其他属性的标记。此外,图中不应该有任何背景、前景或其他元素。这种情况类似于图例如何绘制其符号。我该怎么做?

2
不确定我完全理解你的问题,你可以看一下http://matplotlib.org/examples/user_interfaces/histogram_demo_canvasagg.html。 - GBy
1个回答

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接