如何使用 matplotlibs 颜色图 alpha 值使 tripcolor 图淡化为透明?

How do I use matplotlibs colormap alpha-values to make tripcolor plot fade to transparency?

我想使用 tripcolor 在地图上绘制概率分布,并希望分布在概率为 low/zero 的位置淡入透明。但是 tripcolor 似乎不接受颜色图提供的本地 alpha 值。

我设置了一个自定义颜色映射,从透明 (alpha=0.) 白色过渡到一些蓝色 (alpha=1.),如 matplotlib docs.[=18= 中所述]

cdict = {'red': ((0., 1., 1.),
                 (1., 0., 0.)),
         'green': ((0., 1., 1.),
                   (1., 0.5, 0.5)),
         'blue': ((0., 1., 1.),
                  (1., 1., 1.)),
         'alpha': ((0., 0., 0.),
                   (1., 1., 1.))}
testcmap = colors.LinearSegmentedColormap('test', cdict)
plt.register_cmap(cmap=testcmap)

如果我将其应用到一条线上,如所述here 一切正常。

但是,如果我想使用 tripcolor 来绘制分布,它似乎忽略了颜色映射 alpha 值...

它适用于散点图。

可以在下面找到一个最小的工作示例。

import numpy as np
from matplotlib import pyplot as plt, colors, cm

# quick and dirty test data
ext = np.linspace(0., 1., 21)
coords, _ = np.meshgrid(ext, ext)

x = coords.flatten()
y = coords.T.flatten()

vals = 1. - np.sin(coords * np.pi / 2).flatten()

# color dict
cdict = {'red': ((0., 1., 1.),
                 (1., 0., 0.)),
         'green': ((0., 1., 1.),
                   (1., 0.5, 0.5)),
         'blue': ((0., 1., 1.),
                  (1., 1., 1.)),
         'alpha': ((0., 0., 0.),
                   (1., 1., 1.))}
# colormap from dict
testcmap = colors.LinearSegmentedColormap('test', cdict)
plt.register_cmap(cmap=testcmap)
# plotting
fig, ax = plt.subplots(1)
ax.set_facecolor('black')

ax.tripcolor(x, y, vals, cmap='test')

fig2, ax2 = plt.subplots(1)
ax2.set_facecolor('black')

ax2.scatter(x, y, c=vals, cmap='test')

plt.show()

编辑: 查看 sourcecode line 118 似乎为三角剖分设置了一个全局 alpha。 Copy/pasting tripcolor 函数并省略此行有效。然而,使用 matplotlibs 内置函数仍然很好......

编辑2: 将数据生成函数从 cos 更改为 1-sin 以获得更具启发性的转换。 对于第一个给出好的结果的编辑,我也不得不使用 shading='gouraud'.

这是否更接近您要查找的内容?

ax.tripcolor(x, y, vals, cmap='test', alpha=None)

不知道为什么,但我的猜测是设置 alpha=None 允许每个三角形从颜色图中获取 alpha 颜色。