如何在 Python 中用二进制信息覆盖 pcolormesh
Posted
技术标签:
【中文标题】如何在 Python 中用二进制信息覆盖 pcolormesh【英文标题】:How to overlay a pcolormesh with binary information in Python 【发布时间】:2022-01-17 10:35:27 【问题描述】:给定一个二维数组
172,47,117
192,67,251
195,103,9
211,21,242
目标是放置标记(例如,形状、线条),并参考下方的二进制 2D 坐标与 2D 图像重叠
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()
【问题讨论】:
您的标记顺序好像倒置了。 【参考方案1】:您可以输入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)
输出:
【讨论】:
【参考方案2】:一种方法是使用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()
输出: (因为你的标记是颠倒的)
【讨论】:
以上是关于如何在 Python 中用二进制信息覆盖 pcolormesh的主要内容,如果未能解决你的问题,请参考以下文章