Matplotlib透明覆盖层& pdf透明度

时间:2014-03-11 14:39:24

标签: python matplotlib overlay imshow

假设我有两个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:

绘制 A
import 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的解决方案,它也很有效)。

2 个答案:

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

enter image description here

plt.imshow(y, cmap=cmap2, **params)
plt.show()

enter image description here

plt.imshow(x, cmap=cmap1, **params)
plt.imshow(y, cmap=cmap2, vmin=0, **params) # vmin > -100
plt.show()

enter image description here