отменить пользовательскую цветовую карту

Я хочу отменить свою настраиваемую цветовую карту, которая выглядит так

import matplotlib.cm as cm
import matplotlib as mpl

cm.register_cmap(name='owb',
    data = {'red':      ((0.0, 1.0, 1.0),  # orange
                        (0.5, 1.0, 1.0),  #
                        (1.0, 0.0, 0.0)), # blue

            'green':    ((0.0, 0.6, 0.6),  # orange
                        (0.5, 1.0, 1.0),  #
                        (1.0, 0.0, 0.0)), # blue

             'blue':    ((0.0, 0.0, 0.0),  # orange
                        (0.5, 1.0, 1.0),  #
                        (1.0, 1.0, 1.0))  # blue
            })

Теперь, когда я уже давно ищу решение этой проблемы, я наткнулся на эту ветку:

цветовая карта перевернута

Я пробовал использовать .reversed() здесь:

data = {'red':      ((0.0, 1.0, 1.0),  # orange
                        (0.5, 1.0, 1.0),  #
                        (1.0, 0.0, 0.0)), # blue

            'green':    ((0.0, 0.6, 0.6),  # orange
                        (0.5, 1.0, 1.0),  #
                        (1.0, 0.0, 0.0)), # blue

             'blue':    ((0.0, 0.0, 0.0),  # orange
                        (0.5, 1.0, 1.0),  #
                        (1.0, 1.0, 1.0))  # blue
            }
owb = mpl.colors.ListedColormap('OrWhBlu', data)
owb_reversed = owb.reversed()

Здесь я получил следующую ошибку:

TypeError: unsupported operand type(s) for +: 'dict' and 'str'

но мне просто не удалось заставить его работать.

Пожалуйста, дайте мне знать, что я делаю не так.
Ура

РЕДАКТИРОВАТЬ: Я попробовал решение Костаса, и, поскольку мне нужно использовать colormap_r в другой функции, где требуется имя cmap, я попытался решить его следующим образом:

cmap_r = cm.register_cmap(name="owb_r", cmap=owb_r)

функция, в которой она вызывается:

plt.pcolormesh(xx, yy, -Z, cmap="owb_r")
plt.scatter(X_2d[:, 0], X_2d[:, 1], c=y_2d, cmap="owb_r",
            edgecolors='k')

теперь я получаю следующую ошибку: ValueError: Invalid RGBA argument: 'u'


person CRoNiC    schedule 24.10.2019    source источник
comment
Каков ожидаемый результат? (Как выглядят перевернутые данные?)   -  person balderman    schedule 24.10.2019
comment
хороший вопрос, я попытался поменять местами числа в dict вручную, но он не сделал то, что я хотел. Стандартные cmap всегда имеют cmap_r, и это то, чего я пытаюсь достичь.   -  person CRoNiC    schedule 24.10.2019


Ответы (1)


Вам нужен LinearSegmentedColormap, а не ListedColormap. Затем вам нужно зарегистрировать reversed() его версию.

import numpy as np
import matplotlib.cm as cm
import matplotlib as mpl
import matplotlib.pyplot as plt

colors = [(1.0, 0.6, 0.0), "white","blue"]
cm.register_cmap(cmap=mpl.colors.LinearSegmentedColormap.from_list("owb", colors).reversed())


fig, ax = plt.subplots()
im = ax.imshow(np.random.rand(12,12), cmap="owb_r")
fig.colorbar(im)

plt.show()  
person ImportanceOfBeingErnest    schedule 24.10.2019