我有两个数组,我需要在散点图中使用它们,并考虑它们的成员资格。例如,B
的第一行位于A
的第二行,从第2列到第3列。
#A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
#B
array([[ 5, 6],
[12, 13],
[16, 17]])
我做了下面的代码:
import numpy as np
import matplotlib.pyplot as plt
A = np.arange(20).reshape(5, 4)
B = np.array([[5, 6], [12, 13], [16, 17]])
x, y = np.meshgrid(range(A.shape[0]), range(A.shape[1]))
fig, ax = plt.subplots()
ax.scatter(x, y, facecolor='none', edgecolor='k', s=70, marker='s')
for ix, iy, a in zip(x.ravel(), y.ravel(), A.ravel()):
plt.annotate(a, (ix,iy), textcoords='offset points', xytext=(0,7), ha='center', fontsize=14)
plt.axis("off")
ax.invert_yaxis()
plt.show()
现在,我可以用np.isin(A, B)
检查B
是否在A
中,但有两个问题:
1.不反映A
形状的网格(右侧有一个额外的列)
- True值必须是一个填充的x
'X'
,带有黑色边缘,大小和宽度与红色相同
你有什么办法吗
1条答案
按热度按时间b5lpy0ml1#
根据@chrslg的评论,
x, y = np.meshgrid(range(A.shape[1]), range(A.shape[0]))
而不是x, y = np.meshgrid(range(A.shape[0]), range(A.shape[1]))
。np.isin(A, B)
创建一个布尔数组,可用于索引x
和y
,以便在's'
标记中插入'x'
标记,以获得重叠值。使用
idx_bool
的逆函数有选择地添加facecolor
删除
ax.scatter(x[idx_bool], y[idx_bool], facecolor='none', edgecolor='k', s=70, marker='s')
。