我要反转看起来像这样的自定义颜色图
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的解决方案,由于必须在需要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'
答案 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()