如何只绘制某些具有某些数组值的单元格,而另一些则不使用matplotlib.pyplot绘制?

时间:2019-06-07 14:00:32

标签: python python-3.x matplotlib

我有一幅包含浮点值的图像,另一幅仅包含一和零的图像。我想在第一张图上绘制第二张图,但是我只想从第二张图上绘制图。零不应该绘制。

Ì尝试了以下代码,我也将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)应被涂成纯红色。

2 个答案:

答案 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()

this

答案 1 :(得分:0)

我们可以反过来“结果应该是[..] x作为背景,并且每个位置(其中y为1,都应被涂成纯红色)。,即仅绘制{{1} },并用x遮盖,并将背景设置为红色。

y

enter image description here

当然,还有与之相关的问答环节

Matplotlib imshow: how to apply a mask on the matrixHow can I plot NaN values as a special color with imshow in matplotlib?

并且在matplotlib页面上还有一个示例:Image masked