在matplotlib中使用imshow掩盖箭袋情节

时间:2015-03-23 03:23:30

标签: python matplotlib

我有一个颤抖的情节我正在展示下面的轮廓图。这些都是由二维数组定义的。

我希望能够"画出"图形顶部的对象,例如将10x10黑色方块覆盖在图表上的某处。对象应该是黑色的,图表的其余部分不应该被隐藏。

plt.contourf(X, Y, h)
plt.colorbar()
plt.quiver(X[::2,::2], Y[::2,::2], u[::2,::2], v[::2,::2])
plt.show()

这样做的好方法是什么?

2 个答案:

答案 0 :(得分:1)

如果对象是指多边形,则可以执行此操作。

verts = [
    (0., 0.), # left, bottom
    (0., 1.), # left, top
    (1., 1.), # right, top
    (1., 0.), # right, bottom
    (0., 0.), # ignored
    ]

codes = [Path.MOVETO,
         Path.LINETO,
         Path.LINETO,
         Path.LINETO,
         Path.CLOSEPOLY,
         ]

path = Path(verts, codes)

fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='black')
ax.add_patch(patch)

ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
plt.show()

来自Matplotlib的代码Path Tutorial

答案 1 :(得分:1)

@Favo的回答显示了方法,但是要绘制多边形(可能只有矩形),您不需要打扰Path。 Matplotlib会为你做到这一点。只需使用PolygonRectangle类:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(1,1)

# Directly instantiate polygons
coordinates = [[0.5,0.6],[0.5,0.7],[0.55,0.75],[0.6,0.7],[0.6,0.6]]
poly = plt.Polygon(coordinates, facecolor='black')
ax.add_patch(poly)

# If you just need a Rectangle, then there is a class for that too
rect = plt.Rectangle([0.2,0.2], 0.1, 0.1, facecolor='red')
ax.add_patch(rect)

plt.show()

结果: enter image description here

因此,要实现您的目标,只需创建一个黑色矩形来“覆盖”您的绘图部分。另一种方法是使用蒙版数组,首先只显示箭袋和轮廓图的部分: http://matplotlib.org/examples/pylab_examples/contourf_demo.html