假设我有两个numpy数组(我提供的数组只是示例):
import numpy as np
A = np.arange(144).reshape((12, 12))
np.random.shuffle(A)
B = np.ones((12,12))
B[0:10:4,:] = None
我想使用imshow:
绘制 Aimport matplotlib.pyplot as mplt
mplt.imshow(A, cmap = mplt.gray())
并覆盖 B ,以便无区域完全透明,一个区域的alpha值为(例如alpha = 0.3。) 。
我已经尝试过使用以下内容:
mplt.imshow(B, cmap = mplt.get_cmap('Reds), alpha = 0.3)
但这不起作用。还尝试使用蒙面数组来创建B,但无法理解它。有什么建议吗?
由于
我最终使用
my_red_cmap = mplt.cm.Reds
my_red_cmap.set_under(color="white", alpha="0")
它的功能就像一个魅力(我也测试了Bill的解决方案,它也很有效)。
答案 0 :(得分:2)
如果您使用0代替None
代替透明色,则可以使用您最喜欢的matplotlib色彩图并在其开头添加透明色:
my_red_cmap = mplt.cm.Reds
my_red_cmap.set_under(color="white", alpha="0")
然后您可以使用自定义颜色贴图绘制数组B
,其全局alpha值为0.3,使用透明白色作为其第一个值。
答案 1 :(得分:2)
您可以执行以下操作:
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
x = np.arange(100).reshape(10, 10)
y = np.arange(-50, 150, 2).reshape(10, 10)
y[y<x] = -100 # Set bad values
cmap1 = cm.gray
cmap2 = cm.Reds
cmap2.set_under((1, 1, 1, 0))
params = {'interpolation': 'nearest'}
plt.imshow(x, cmap=cmap1, **params)
plt.show()
plt.imshow(y, cmap=cmap2, **params)
plt.show()
plt.imshow(x, cmap=cmap1, **params)
plt.imshow(y, cmap=cmap2, vmin=0, **params) # vmin > -100
plt.show()