如何使用 matplotlib 合并补丁

How merge patches with matplotlib

有什么方法可以合并具有公共边的补丁吗? 我使用矩阵生成一系列适当样式的补丁,以了解边缘颜色。 更详细:

  1. 我读了一张图片
  2. 我调整图像大小并将其分成 64x64 块
  3. 在每个图块上循环并构建一个值矩阵,每个图块一个。

结果是一个带有基于矩阵值设置样式的补丁的图形。

以下代码工作正常:

for row in range(0, h, dim):
for col in range(0, w, dim):
c_map2 = [(1,0,0,1),(0,0,1,1),(0.2,0.2,0.2,1),(0,0,0,0),(0,1,0,1)] #position 3 will be not visible
_p = patches.Rectangle((row, col), dim - 1, dim - 1, linewidth=1.5, fill=False, edgecolor=c_map2[int(y_class2)])
plt.gca().add_patch(_p)

这里是矩阵和图形的例子:

Show classes matrix
[[3. 3. 3. 3.]
 [3. 4. 4. 4.]
 [4. 4. 2. 2.]
 [3. 2. 1. 2.]]

如何删除相同颜色块之间的边缘,只保留相同颜色区域的外边缘?

谢谢。

我分别使用 matplotlib contour 和 contourf 方法解决了绘制 ROI 周长和填充 ROI 的问题。 更详细:

  1. 我为我需要绘制轮廓的值 x 创建了一个 1 和 2 的掩码,其中 x 被 1 替换,所有其他值被 2 替换。

    new_matrix = np.where(old_matrix == 0, 1,2)

  2. 我定义了两个级别:

    level1 = [0,1] level2 = [1,2]

  3. 我绘制了轮廓和面积:

    ax2.contour(new_matrix, levels1, colors='yellow', linewidths=1, zorder=1)

    ax3.contourf(new_matrix, levels1, colors='yellow', alpha=0.5)

    ax3.contourf(new_matrix, levels2, colors='gray', alpha=0)