首页 > 解决方案 > Matplotlib:添加从全透明到全彩色的自定义颜色条(去除伪影)

问题描述

我正在尝试向我的 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。您不再看到这些线条,因为它们已与其他线条混合,但这些线条使颜色条看起来更暗。

线条使颜色条比应有的颜色更暗

标签: pythonpython-3.xmatplotlibtransparencycolorbar

解决方案


RGBA使用HSV各种饱和度,而不是 level on :

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')

在此处输入图像描述


推荐阅读