2

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

这就像一个魅力(我也测试了比尔的解决方案,它也很有效)。

4

2 回答 2

4

如果不None使用 0 作为透明颜色,您可以使用您最喜欢的 matplotlib 颜色图并在其开头添加透明颜色:

my_red_cmap = mplt.cm.Reds
my_red_cmap.set_under(color="white", alpha="0")

然后您可以B使用您的自定义颜色映射来绘制具有 0.3 全局 alpha 的数组,该映射将使用透明白色作为其第一个值。

于 2014-03-11T15:01:21.653 回答
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()

在此处输入图像描述

于 2014-03-11T16:31:24.660 回答