colormap

matplotlib自定义colormap

本帖主要就介绍一下matplotlib中自定义colormap的一些命令,以及制作colormap的一些方法。
1) matplotlib.Colors.LinearSegmentedColormap (name,segmentdata,N=256,gamma=1.0)
colormap对象以线性分割的数据列表为基础,数据列表是由原色三元组进行线性插值产生,为[0 1]之间的值。
其中segmentdata是一个由red,blue,green词条构成的词典,每一个词条都由 x,y0,y1三个值构成,参数alpha为可选项。词条中的三个值的含义为:x 表示在colorbar中的位置,即colorbar的长度为1,因此 x 的值在[0 1]之间,且只能单调变化; y0,y1为表示颜色的值,通常为相同的值,如果取值不同时,对colormap的变化更有帮助。y0表示为 x 左边的颜色值,y1表示为 x 右边的颜色值。
下面举个例子:
cdict = {'red': [(0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 1.0, 1.0)],
'green': [(0.0, 0.0, 0.0),
(0.25, 0.0, 0.0),
(0.75, 1.0, 1.0),
(1.0, 1.0, 1.0)],
'blue': [(0.0, 0.0, 0.0),
(0.5, 0.0, 0.0),
(1.0, 1.0, 1.0)]}
上述词典中 red 数据表示把colorbar中red分为两部分,[0 0.5]和[0.5 1],绿色分为三部分,即在[0 0.25]之间green为0,[0.25,0.75]之间
green为1,[0.75,1]之间green为1,蓝色同理。
gamma值用于调节colormap底部和顶部的亮度。
因为每一段的颜色都是在y0和y1之间进行插值所得,因此第一行的y0和最后一行的y1是不会用到的。
2) matplotlib.colors.ListedColormap(colors,name='from_list',N=None)
3) matplotlib.cm.get_cmap(name=None,lut=None)

  1. matplotlib.cm.register_cmap(name=None,cmap=None,data=None,lut=NOne)
    以上几个命令不再一一赘述,更详细的信息可以点我

以下是一些创建colormap的方法:
1) 使用LinearSegmentedColormap命令

import matplotlib.colors as col
cdict = {'red': ((0.0, 0.0, 0.0),
                          (0.3, 0.5, 0.5),
                          (0.6, 0.7, 0.7),
                          (0.9, 0.8, 0.8),
                          (1.0, 0.8, 0.8)),
            'green': ((0.0, 0.0, 0.0),
                           (0.3, 0.8, 0.8),
                           (0.6, 0.7, 0.7),
                           (0.9, 0.0, 0.0),
                           (1.0, 0.7, 0.7)),
                      'blue': ((0.0, 1.0, 1.0),
                                   (0.3, 1.0, 1.0),
                                  (0.6, 0.0, 0.0),
                                  (0.9, 0.0, 0.0),
                           (1.0, 1.0, 1.0))}
cmap1 = col.LinearSegmentedColormap('my_colormap',cdict,N=256,gamma=0.75)  
# my_colormap可以自定义,如果没有cmap1,下面的cmap1可以换位my_colormap,但是为字符串格式
# gamma项 一般可以省略
    cm.register_cmap(name='own1', cmap=cmap1)   # 进行‘注册’,使get_cmap命令能检索到该cmap

<span id="kM0.04844997560317399">2) 使用from_list方法
</span><div class="blockcode"><blockquote>import matplotlib.colors as col
startcolor = '#586323' 
midcolor = '#fcffc9' 
endcolor = '#bd2309' 
cmap2 = col.LinearSegmentedColormap.from_list('own2',[startcolor,midcolor,endcolor])
cm.register_cmap(cmap=cmap2)

2) 使用ListedColormap命令

import matplotlib.colors as col
cpool = [ '#bd2309', '#bbb12d', '#1480fa', '#14fa2f', '#000000',
              '#faf214', '#2edfea', '#ea2ec4', '#ea2e40', '#cdcdcd',
              '#577a4d', '#2e46c0', '#f59422', '#219774', '#8086d9' ]
cmap3 = col.ListedColormap(cpool[0:10], 'indexed')
# 注意:cpool中有15个颜色,但是只使用了10个,其余的会被忽略
# 具体可查阅matplotlib官方文档中对ListedColormap的说明
cm.register_cmap(cmap=cmap3)
import netCDF4 as nc
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np

filepath   = '/run/media/root/*WRF/-5/s/wrfout_d02_2014-09-28_12_00_00'
data       = nc.Dataset(filepath,'r')

var        = 'REFL_10CM'
dbz        = data.variables[var][:]
dbzsize    = np.shape(data.variables[var])
timelen    = dbzsize[0]
heightlen  = dbzsize[1]
latlen     = dbzsize[2]
lonlen     = dbzsize[3]
print(dbzsize)

lats  = 30;  late  = 35;
lons  = 114; lone  = 120;
m = Basemap(projection='cyl',llcrnrlat=lats,urcrnrlat=late,llcrnrlon=lons,urcrnrlon=lone,resolution='i')
m.drawparallels(np.arange(lats,late+1,1.),labels = [1,0,0,0],fontsize=15,linewidth = 0. )
# set linewidth = 0 to turn off longitude and latitude dash line
m.drawmeridians(np.arange(lons,lone+2,2.),labels = [0,0,0,1],fontsize=15,linewidth = 0.)
m.drawcoastlines()
m.drawcountries()
#m.drawlsmask()
lon,lat  = m.makegrid(lonlen,latlen)
print(np.shape(lon))
x,y = m(lon,lat)
clevs = np.arange(0,70,10)
cdict = {'red'  : [(0.,0,1),
                   (0.15,1.,1.),
                   (0.3,0.85,0.85),
                   (0.45,0.7,0.7),
                   (0.6,0.55,0.55),
                   (0.75,0.4,0.4),
                   (0.9,0,1),
                   (1.,1.,0.)],
         'green' : [(0.,0,1),
                   (0.15,1.,1.),
                   (0.3,0.85,0.85),
                   (0.45,0.7,0.7),
                   (0.6,0.55,0.55),
                   (0.75,0.4,0.4),
                   (0.9,1.,1.),
                   (1.,1.,1.)],
         'blue'  : [(0.,0,1),
                   (0.15,1.,1.),
                   (0.3,0.85,0.85),
                   (0.45,0.7,0.7),
                   (0.6,0.55,0.55),
                   (0.75,0.4,0.4),
                   (0.9,1,1.),
                   (1.,1.,1.)]}
my_cmap = colors.LinearSegmentedColormap(name='dbzcmap',segmentdata = cdict,N=256)
#cm.register_cmap(name = 'dbzcmap',data = cdict,lut = 128)
# 如果把上述语句取消注释,把LinearSegmentedColormap语句行注释掉,也可定义colormap
# 但是下面语句中的cmap=my_cmap应改为 cmap = 'dbzcmap'
ref  = m.contourf(lon,lat,dbz[29,29,:,:],clevs,alpha = 1,cmap= my_cmap)#plt.cm.Greys)  
# alpha 表示透明度
cbar = m.colorbar(ref)
cbar.set_label('dBZ')
axes = plt.gca()
plt.grid(False)

plt.title('Reflectivity plot for WRF_ARW',size = 20)
plt.savefig('dbz')
plt.show()
image.png
image.png

python colormaps 速查

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容