首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将python colormaps修改为某个特定点以外的单个值

将python colormaps修改为某个特定点以外的单个值
EN

Stack Overflow用户
提问于 2016-08-18 17:35:54
回答 5查看 6.5K关注 0票数 6

我如何改变一个彩色地图的配色方案,以显示同一颜色以外的一点。

这是我的彩色地图:

代码语言:javascript
复制
import palettable
cmap = palettable.colorbrewer.sequential.YlGn_9.mpl_colormap

如果我使用这个彩色地图来绘制一个从0到100的范围,我如何修改颜色地图,使其超过50,它会改变为颜色红色?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-08-25 21:02:17

您可以为给定范围(0→100)创建颜色映射,方法是将两个不同的共格叠加在一起,如下所示:

插图:

代码语言:javascript
复制
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()

如果您希望上面的部分颜色相同,而不是分散在颜色图的长度上,您可以进行以下修改:

代码语言:javascript
复制
colors2 = plt.cm.Reds(np.linspace(1, 1, 256))

票数 11
EN

Stack Overflow用户

发布于 2016-08-18 19:01:00

cmap.set_over("red")

您可能需要使用其中一个范数函数来设置特定的界限。如果使用imshow,还可以设置参数vmin=50使其成为您的最高值。

票数 3
EN

Stack Overflow用户

发布于 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)

代码语言:javascript
复制
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()

代码语言:javascript
复制
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()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39024331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档