首页 > 解决方案 > 如何仅绘制具有某些数组值的单元格,而其他不使用 matplotlib.pyplot 的单元格?

问题描述

我有一个由浮点值组成的图像和另一个仅由 1 和 0 组成的图像。我想在第一个图像上绘制第二个图像,但我只想绘制第二个图像中的图像。不应绘制零点。

Ì 尝试了以下代码,我还将 y 的 alpha 更改为 1。问题是,要么 y 的红色窗口从 x 更改(y 的 alpha = 0.5),要么甚至看不到 x 的图(y = 1 的阿尔法)。

import matplotlib.pyplot as plt
import numpy as np

x = np.random.random(size=(20,20))
y = np.random.randint(2, size=(20,20))

fig = plt.figure()
plt.imshow(x, cmap="Greys", alpha = 0.5)
plt.imshow(y, cmap="Reds", alpha = 0.5)
plt.show()

我怎样才能只绘制 y 的图?

更新:感谢您的回答!但这不是我要寻找的。我再解释一下:

结果应该是这样的:x 作为背景,y 为 1 的每个位置都应该涂成纯红色。

标签: pythonpython-3.xmatplotlib

解决方案


按照@ImportanceOfBeingEarnest 链接的答案中的方法,您的情况的确切解决方案如下所示。在这里,将在它为 0 的地方np.ma.masked_where屏蔽您的数组。生成的数组将仅包含 1。y

编辑:覆盖的问题似乎源于cmap. 如果您不为 指定cmapy您可以在下面清楚地看到确实只有 1 被绘制并覆盖在x. 为了获得离散颜色(在您的情况下为红色),您可以创建自定义颜色图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors

x = np.random.random(size=(20,20))
y = np.random.randint(2, size=(20,20))

y_new =np.ma.masked_where(y==0, y)
cmap = colors.ListedColormap(['red'])

fig = plt.figure()
plt.imshow(x, cmap="Greys", alpha = 0.5)
plt.imshow(y_new, cmap=cmap, alpha=1)
plt.show()

在此处输入图像描述


推荐阅读