我想叠加几个 hexbin 图,但是使用内置颜色图只有最后一个是可见的。我不想从头构建颜色图。如何在事先不知道颜色图的内部结构的情况下将线性 alpha 添加到颜色图?
原文由 Hennadii Madan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想叠加几个 hexbin 图,但是使用内置颜色图只有最后一个是可见的。我不想从头构建颜色图。如何在事先不知道颜色图的内部结构的情况下将线性 alpha 添加到颜色图?
原文由 Hennadii Madan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想通过修复扩展 Bart 的答案,消除颜色条中的线条伪影。一些历史:截至今天,这些线条伪影仍然存在,并且没有得到很好的解决(请参阅 Matplotlib:添加一个从全透明到全彩色的自定义颜色条(删除伪影) , 为什么我的颜色条中有线条? )。然而,每种带有 alpha 通道的颜色只不过是颜色与其背景的混合。因此,如果知道背景,就可以计算出相应的非 alpha 颜色(参见 https://www.viget.com/articles/equating-color-and-transparency/ )。
下面的解决方案假设,实际的透明度对于这个数字来说不是必需的。如果一个人在图中使用真正的 alpha 和一个自己的颜色图,如果需要的话,可以计算出非 alpha 颜色值。
import numpy as np
import matplotlib.pylab as pl
from matplotlib.colors import ListedColormap
# Random data
data1 = np.random.random((4,4))
# Choose colormap which will be mixed with the alpha values
cmap = pl.cm.RdBu
# Get the colormap colors
my_cmap = cmap(np.arange(cmap.N))
# Define the alphas in the range from 0 to 1
alphas = np.linspace(0, 1, cmap.N)
# Define the background as white
BG = np.asarray([1., 1., 1.,])
# Mix the colors with the background
for i in range(cmap.N):
my_cmap[i,:-1] = my_cmap[i,:-1] * alphas[i] + BG * (1.-alphas[i])
# Create new colormap which mimics the alpha values
my_cmap = ListedColormap(my_cmap)
# Plot
f, axs = pl.subplots(1,2, figsize=(8,3))
h = axs[0].pcolormesh(data1, cmap=pl.cm.RdBu)
cb = f.colorbar(h, ax=axs[0])
h = axs[1].pcolormesh(data1, cmap=my_cmap)
cb = pl.colorbar(h, ax=axs[1])
f.show()
原文由 Tik0 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
4 回答935 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
我不太确定这是否符合“不知道颜色图的内部结构”,但也许像这样的东西可以将线性 alpha 添加到现有颜色图?