我如何改变一个彩色地图的配色方案,以显示同一颜色以外的一点。
这是我的彩色地图:
import palettable
cmap = palettable.colorbrewer.sequential.YlGn_9.mpl_colormap如果我使用这个彩色地图来绘制一个从0到100的范围,我如何修改颜色地图,使其超过50,它会改变为颜色红色?
发布于 2016-08-25 21:02:17
您可以为给定范围(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))

发布于 2016-08-18 19:01:00
cmap.set_over("red")
您可能需要使用其中一个范数函数来设置特定的界限。如果使用imshow,还可以设置参数vmin=50使其成为您的最高值。
发布于 2016-08-27 19:15:14
您可以使用以下方法从现有的颜色映射创建新的颜色映射:
newcmap = cmap.from_list('newcmap',list(map(cmap,range(50))), N=50)
这个新的映射使用颜色映射中的最后一个值来表示超过50的颜色。要使最后一种颜色变为红色,我们只需将红色附加到定义颜色映射的列表中的最后一种颜色。
newcmap = cmap.from_list('newcmap',list(map(cmap,range(50)))+[(1,0,0,1)], N=51)
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()

https://stackoverflow.com/questions/39024331
复制相似问题