如何在 Python 中用二进制信息覆盖 pcolormesh

How to overlay a pcolormesh with binary information in Python

给定一个二维数组

172,47,117
192,67,251
195,103,9
211,21,242

objective是将标记(例如,形状,线条)放置在二维图像上,参考下面的二进制二维坐标

0,1,0
0,0,0
0,1,0
1,1,0

具体来说,如果单元格等于 1

,则会放置一个标记

预期输出如下。在这个例子中,标记是水平红线的形式。但是,标记可以是使代码更直接的任何其他形状。

我可以知道如何使用 Python 中的任何图形包实现此目的吗?

以上坐标可以通过以下方式复现

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
X=np.random.randint(256, size=(4, 3))
arrshape=np.random.randint(2, size=(4, 3))
fig = plt.figure(figsize=(8,6))
plt.pcolormesh(X,cmap="plasma")
plt.title("Plot 2D array")
plt.colorbar()
plt.show()

你可以输入 scatter:

x,y = X.shape
xs,ys = np.ogrid[:x,:y]
# the non-zero coordinates
u = np.argwhere(arrshape)

plt.scatter(ys[:,u[:,1]].ravel()+.5, 
            xs[u[:,0]].ravel()+0.5,
            marker='x', color='r', s=100)

输出:

一种方法是使用 matplotlib

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
X=np.random.randint(256, size=(4, 3))
arrshape=np.random.randint(2, size=(4, 3))
fig = plt.figure(figsize=(8,6))
plt.pcolormesh(X,cmap="plasma")
plt.title("Plot 2D array")
plt.colorbar()

markers = [
    [0,1,0],
    [0,0,0],
    [0,1,0],
    [1,1,0]]

draw = []
for y, row in enumerate(markers):
    prev = 0
    for x, v in enumerate(row):
        if v == 1:
            plt.plot([x+0.25, x+0.75], [y+0.5, y+0.5], 'r-', linewidth=5)
            if prev == 1:
                plt.plot([x-0.5, x+0.5], [y+0.5, y+0.5], 'r-', linewidth=5)
        prev = v

plt.show()

输出: (因为你的标记是颠倒的)