我有一幅包含浮点值的图像,另一幅仅包含一和零的图像。我想在第一张图上绘制第二张图,但是我只想从第二张图上绘制图。零不应该绘制。
Ì尝试了以下代码,我也将y的alpha更改为1。问题是,要么y的红色窗口从x更改(y的alpha = 0.5),要么甚至看不到x(y的alpha = 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)应被涂成纯红色。
答案 0 :(得分:0)
按照{@ 3m}}答案中由@ImportanceOfBeingEarnest链接的方法,您的情况下的确切解决方案如下所示。在这里,np.ma.masked_where
将在y
数组为0的地方屏蔽它。结果数组仅包含1。
编辑:重叠问题似乎源于cmap
的选择。如果您没有为cmap
指定y
,则可以清楚地看到下面确实确实只绘制了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()
答案 1 :(得分:0)
我们可以反过来“结果应该是[..] x作为背景,并且每个位置(其中y为1,都应被涂成纯红色)。,即仅绘制{{1} },并用x
遮盖,并将背景设置为红色。
y
当然,还有与之相关的问答环节
Matplotlib imshow: how to apply a mask on the matrix或 How can I plot NaN values as a special color with imshow in matplotlib?
并且在matplotlib页面上还有一个示例:Image masked