如何在 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()
输出:
(因为你的标记是颠倒的)
给定一个二维数组
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()
输出: (因为你的标记是颠倒的)