Matplotlib: добавить пользовательскую цветовую панель, которая работает от полностью прозрачного до полноцветного (удалить артефакты) - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь добавить пользовательскую цветовую полосу к моей фигуре 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. Таким образом, вы можете увидеть линии между каждым патчем.

Lines visible

Это изображение для transparency_ticks = 5000. Вы больше не видите линий, так как они смешиваются с остальными, но эти линии делают цветную полосу намного темнее.

Lines make colorbar darker than it should be

1 Ответ

0 голосов
/ 09 мая 2019

Вместо уровней на 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')

enter image description here

...