反转自定义颜色图

时间:2019-10-24 08:42:19

标签: python matplotlib reverse colormap

我要反转看起来像这样的自定义颜色图

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

现在,由于我一直在寻找解决方案,因此我遇到了这个线程:

colormap reversed

我尝试在此处使用.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的解决方案,由于必须在需要cmap名称的另一个函数中使用colormap_r,因此我尝试通过以下方式解决它:

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 个答案:

答案 0 :(得分: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()