添加从全透明到全彩的自定义颜色条(消除伪影)

问题描述 投票:0回答:1

我正在尝试向我的 matplotlib 图形添加自定义颜色条,该颜色条从全透明(白色)到全色(中紫色)。

我已经走了很远,但仍然存在一些问题。我的制作方法是在每个补丁之间创建可见的线条。当我尝试使颜色条看起来流畅时,这会产生伪影。

fig, ax = plt.subplots(figsize=(10, 10))
max_val = 4
transparency_ticks = 500
color = mpl.colors.to_rgba(color)
cmap = mpl.colors.ListedColormap([(*color[:3], (1+a)/transparency_ticks) for a in range(transparency_ticks)])
norm = mpl.colors.Normalize(vmin=0, vmax=max_val)
cax = fig.add_axes([0.8, 0.17, 0.05, 0.5])
mpl.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm, orientation='vertical')

这是

transparency_ticks = 500
的图像。所以你可以看到每个补丁之间的线条。

这是

transparency_ticks = 5000
的图像。您不再看到这些线条,因为它们已与其余部分混合,但这些线条使颜色条看起来更暗。

python python-3.x matplotlib transparency colorbar
1个回答
2
投票

不要使用

RGBA
上的级别,而是使用具有各种饱和度的
HSV

fig, ax = plt.subplots(figsize=(10, 10))
max_val = 4
transparency_ticks = 50
colors = [mpl.colors.hsv_to_rgb((0.83, a/transparency_ticks, 1)) 
          for a in range(transparency_ticks)]
cmap = mpl.colors.ListedColormap(colors)
norm = mpl.colors.Normalize(vmin=0, vmax=max_val)
cax = fig.add_axes([0.8, 0.17, 0.05, 0.5])
mpl.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm, orientation='vertical')

© www.soinside.com 2019 - 2024. All rights reserved.