如何创建自己的cmap?

How to create own cmap?

我尝试了下面的代码,但是匹配的名字用错了。请问如何给创建的色图命名?

import numpy as np
import matplotlib.pyplot as plt 

from matplotlib.colors import LinearSegmentedColormap

cMap = []
for value, colour in zip([28800, 29000, 29200, 29400, 29600, 29800, 30000],["darkblue", "mediumblue", "royalblue", "cornflowerblue", "dodgerblue", "skyblue", "paleturquoise"]):
    cMap.append((value, colour))

customColourMap = LinearSegmentedColormap.from_list("pri_c", cMap)

x=np.arange(9)
y=[9,2,8,4,5,7,6,8,7]

plt.scatter(x,y, c=y,cmap='pri_c')
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Scatter Plot with Virdis colormap")
plt.colorbar()
plt.show()

如果您正在使用 matplotlib >= 3.5,那么您可以使用 plt.colormaps.register 注册色图。

如果您使用的是旧版本,请使用 plt.register_cmap

您需要映射介于 0 和 1 之间的颜色值,这样您的代码看起来像

import numpy as np
import matplotlib.pyplot as plt 

from matplotlib.colors import LinearSegmentedColormap

color_values = np.array([28800, 29000, 29200, 29400, 29600, 29800, 30000])
color_values -= color_values[0]
color_values = color_values / color_values[-1]
color_names = ["darkblue", "mediumblue", "royalblue", 
               "cornflowerblue", "dodgerblue", "skyblue", 
               "paleturquoise"]

cMap = list(zip(color_values, color_names))
customColourMap = LinearSegmentedColormap.from_list("pri_c", cMap)

# if mpl >= 3.5
plt.colormaps.register(customColourMap)
# if mpl < 3.5
# plt.register_cmap(cmap=customColourMap)

x=np.arange(9)
y=[9,2,8,4,5,7,6,8,7]

plt.scatter(x,y, c=y,cmap='pri_c')
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Scatter Plot with Virdis colormap")
plt.colorbar()
plt.show()