отменить пользовательскую цветовую карту - PullRequest
0 голосов
/ 24 октября 2019

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

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'

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

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

РЕДАКТИРОВАТЬ: я попробовалрешение Kostas, и так как я должен использовать 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'

1 Ответ

1 голос
/ 24 октября 2019

Вам нужно 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()  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...