如何将颜色地图调色板更改为在一个点之后显示相同的颜色。
例如,这是我的颜色地图:
import palettable
cmap = palettable.colorbrewer.sequential.YlGn_9.mpl_colormap
如果我使用这个颜色地图来绘制0到100的范围,我该如何修改颜色地图,使得超过50后颜色变为红色?
如何将颜色地图调色板更改为在一个点之后显示相同的颜色。
例如,这是我的颜色地图:
import palettable
cmap = palettable.colorbrewer.sequential.YlGn_9.mpl_colormap
如果我使用这个颜色地图来绘制0到100的范围,我该如何修改颜色地图,使得超过50后颜色变为红色?
你可以通过在一起堆叠两个不同的色图来为给定范围(0→100)创建色图,如下所示:
说明:
import numpy as np
import matplotlib.pyplot as plt
import palettable
import matplotlib.colors as mcolors
# Set random seed
np.random.seed(42)
# Create random values of shape 10x10
data = np.random.rand(10,10) * 100
# Given colormap which takes values from 0→50
colors1 = palettable.colorbrewer.sequential.YlGn_9.mpl_colormap(np.linspace(0, 1, 256))
# Red colormap which takes values from 50→100
colors2 = plt.cm.Reds(np.linspace(0, 1, 256))
# stacking the 2 arrays row-wise
colors = np.vstack((colors1, colors2))
# generating a smoothly-varying LinearSegmentedColormap
cmap = mcolors.LinearSegmentedColormap.from_list('colormap', colors)
plt.pcolor(data, cmap=cmap)
plt.colorbar()
# setting the lower and upper limits of the colorbar
plt.clim(0, 100)
plt.show()
如果您想让上部分与颜色相同并不在颜色地图的整个长度上扩展,您可以进行以下修改:
colors2 = plt.cm.Reds(np.linspace(1, 1, 256))
cmap.set_over("red")
如果要设置特定边界值,您可以使用norm函数之一。如果使用imshow函数,您还可以设置vmin=50参数,使其成为顶部值。
import palettable
from matplotlib import pyplot as plt
cmap = palettable.colorbrewer.sequential.YlGn_9.mpl_colormap
newcmap = cmap.from_list('newcmap',list(map(cmap,range(50))), N=50)
for x in range(80):
plt.bar(x,1, width=1, edgecolor='none',facecolor=newcmap(x))
plt.show()
newcmap = cmap.from_list('newcmap',list(map(cmap,range(50)))+[(1,0,0,1)], N=51)
for x in range(80):
plt.bar(x,1, width=1, edgecolor='none',facecolor=newcmap(x))
plt.show()
我认为你不应该改变色图,而是使用色图的对象。我不久前也问了一个类似的问题:如何更改contourf图形第一级的颜色, 我从这里获得了答案:Python matplotlib 如何更改超出colorbar范围的默认颜色
例如,如果您在绘图中使用等高线(contours),您应该这样做:
cs = pyplot.contourf(x,y,z, cmap=your_cmap)
cs.cmap.set_over('r') # Change color to red
cs.set_clim(0, 50) # Set the limit beyond which everything is red
cb = pyplot.colorbar(cs) # Plot the colorbar (if needed)
您可以通过以下方式访问颜色:
cmap_dict = cmap._segmentdata
red = cmap_dict["red"]
green= cmap_dict["green"]
blue = cmap_dict["blue"]
alpha = cmap_dict["alpha"]
red .append(red [1])
cmap_dict_new["red"] = red
new_cmap = palettable.palette.ListedColormap(cmap_dict_new)