gpt4 book ai didi

python - 如何使用 matplotlibs 颜色图 alpha 值使三色图淡入透明?

转载 作者:行者123 更新时间:2023-12-01 07:15:47 25 4
gpt4 key购买 nike

我想使用 Tripcolor 在 map 上绘制概率分布,并希望该分布在概率低/为零时淡入透明。然而 tripcolor 似乎不接受颜色图提供的本地 alpha 值。

我设置了一个自定义颜色图,从透明 (alpha=0.) 白色过渡到某种蓝色 (alpha=1.),如matplotlib docs .

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似乎为三角测量设置了全局阿尔法。复制/粘贴 Tripcolor 函数并省略此行是有效的。不过,使用 matplotlibs 内置函数仍然会很好......

编辑2:将数据生成函数从 cos 更改为 1-sin,以获得更具暗示性的过渡。为了在第一次编辑时获得良好的结果,我还必须使用 shading='gouraud'

最佳答案

这更接近您正在寻找的东西吗?

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

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

关于python - 如何使用 matplotlibs 颜色图 alpha 值使三色图淡入透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57974162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com