我必须承认,了解如何创建或操作matplotlib的色彩图并不是一件容易的事.因此,我正在寻求一些帮助来解释和设置从蓝色(负)到红色(正)的色彩图,并且白色以零为中心.我想在contourf中使用这个cmap:

>这有效,但颜色是相反的

cs = plt.contourf(longrid,latgrid,ar[window-1]-bkGrd,levels,cmap = cm.get_cmap('BuRd',len(levels)-1))

>这里的问题是BuRd_r在零附近带走了白色

cs = plt.contourf(longrid,cmap = cm.get_cmap('BuRd_r',len(levels)-1))

我很感激任何帮助.

这是测试色彩映射的功能和数据:

def PlotAnomalyCF(ar,hgrid,longrid,outfile,units):                        
    window = 1                                                                           
    tsize = 8                                                                            
    plt.close()                                                                          
    plt.figure(figsize=(11.7,4.3) )                                                      
    plt.clf()                                                                            
    plt.cla()                                                                            

    bkGrd = bn.nanmean(ar[:],0)

    for v in hgrid:OA                                                                    
        plt.subplot(1,len(hgrid),window)                                                 
        plt.title(v,fontsize=tsize)                                                      
        plt.subplots_adjust(left=0.07,bottom=0.75,right=0.98,top=0.92,wspace=0.12,hspace=0.98)                                     
        cs = plt.contourf(longrid,cmap=cm.get_cmap('BuRd_r',len(levels)-1))                      
        cs.cmap.set_over('r')                                                            
        plt.grid(True)                                                                   
        plt.axis('off')                                                                  
        window += 1                                                                      
    ax = plt.gca()                                                                       
    pos = ax.get_position()                                                              
    l,b,w,h = pos.bounds                                                                 
    print l,h                                                                        
    cax = plt.axes([l-0.848,b-0.05,0.91,0.02]) # setup colorbar axes                     
    cbar = plt.colorbar(cs,cax=cax,orientation='horizontal')                             
    cl = plt.getp(cbar.ax,'xticklabels')                                                
    plt.setp(cl,fontsize=8)
    # Add units text                                                                     
    plt.figtext(0.012,0.83,units,fontsize=tsize+1)                                       
    print 'outfile.',outfile                                                             
    plt.savefig(outfile,dpi=900,orientation='landscape',format='pdf')                    
    plt.show()

# Data
hgrid = array([-18,-15,-12,-9,-6,-3,3,6,9,12,15,18])
latgrid = array([ 5.61402391,4.91227095,4.21051798,3.508765,2.80701201,2.10525902,1.40350602,0.70175301,0.,-0.70175302,-1.40350604,-2.10525907,-2.8070121,-3.50876514,-4.21051818,-4.91227122,-5.61402427])
longrid = array([-5.625,-4.921875,-4.21875,-3.515625,-2.8125,-2.109375,-1.40625,-0.703125,0.703125,1.40625,2.109375,2.8125,3.515625,4.21875,4.921875,5.625   ])
levels = array([-20,-19,-18,-17,-16,-14,-13,-11,-10,-8,-7,-5,-4,-2,-1,1,2,4,5,7,8,10,11,13,14,16,17,18,19,20])
units ='$\mathrm{CC_{200}\,[\%]}$'
ar = shape is (13,17) with max = 82.4 and min = 45.5. It would be easier to just
     generate some random data within these intervals. Alternatively just copy one of the 
     array:
ar[1] = array([[ 46.91224792,46.21374984,46.86130719,47.01021234,46.72626813,46.2288305,46.43835451,45.79325437,45.58271668,46.35872217,48.08725987,48.44553638,47.76519316,47.6366742,48.40425078,48.77756577,49.33566712],[ 46.83599932,46.84286989,47.33453309,46.55030976,46.80566458,46.53292035,47.02261763,47.41084421,47.38724565,47.91122826,49.21117552,49.45223641,49.97629913,50.44165439,51.08080398,50.79600723,49.968034  ],[ 47.42288313,47.07674124,46.7167639,46.11959218,46.95814111,46.88763807,47.79510368,48.50213272,49.14340301,50.0550682,50.96554707,51.70960776,52.76304827,53.13428506,53.01955687,52.57951586,51.91245273],[ 47.71067291,47.48154219,47.40131211,47.45929857,48.46118424,48.65199823,49.38156691,49.86137507,50.55394084,51.96604309,52.60579898,53.69096203,54.22750101,54.37757099,54.31517398,53.47697773,53.41809044],[ 48.20779565,48.58856851,48.75880829,49.40822878,50.03355014,51.44922083,52.00567831,52.99485667,53.69339127,53.58208129,53.88588998,55.24096208,55.24137628,55.38338399,55.30856415,55.0329081,54.58041914],[ 49.20063728,49.81223264,50.2145489,50.54749112,51.44252761,53.1708726,54.48141824,55.1337493,55.86338227,55.80719304,56.1060897,56.15050406,56.10404113,56.82550383,57.12370494,56.79250814,57.21656741],[ 50.17222332,50.78494993,51.47036476,51.78513471,54.07329312,55.12136894,56.63202678,56.77587861,57.60688855,57.31874243,57.86532727,58.38753463,58.52204736,58.8451274,59.17282185,58.93137673,58.90977463],[ 51.50642331,51.51055372,52.44746806,53.37696513,54.86775802,56.68992167,57.90624404,58.76394172,59.64662899,59.80540837,59.98355254,60.05761821,59.95848562,60.54540623,60.4776266,60.11749116,59.74209418],[ 51.40396463,51.48043239,52.89530187,53.73500868,55.39612502,56.70178532,58.07064267,59.56644298,60.47288049,60.59095081,61.26474813,61.20278944,61.43807574,61.1942828,60.40014922,59.78371327,59.50410992],[ 51.89656984,52.18725649,52.57764233,54.39502415,55.61672911,57.04180061,58.54357871,59.76354498,60.24155861,60.59473182,60.65985503,60.92762915,60.76726905,60.47166256,60.42044548,60.04043031,60.06031171],[ 51.69698671,52.39494994,52.71685017,53.65488505,54.52480831,56.33091376,57.87811829,58.36719736,59.31479758,59.61329074,59.81807224,59.44053305,59.25522337,59.5309563,59.68850776,59.54046914,58.60604327],[ 50.81523448,51.5690217,51.81382216,52.88514118,53.27394887,54.6941369,55.81938471,56.85401174,57.10874072,58.55074569,58.45869901,57.67496274,57.3895956,58.05319653,58.83009123,57.90678384,56.97717781],[ 49.61355365,49.92298625,50.56281781,51.22117266,51.98020374,53.0328832,53.76602714,54.94396421,55.16849545,55.83033544,56.19720112,56.9382048,57.20669361,56.76351885,56.93632305,56.16428665,54.7570241 ],[ 49.17250426,49.14663096,49.86504335,50.24394193,50.84671744,51.21785439,51.72667942,52.8287256,53.65550669,53.81801262,54.62490542,54.88045696,55.27367041,54.89234901,54.51005786,53.57284022,52.53966996],[ 48.55125023,48.99467099,49.80237362,49.67943854,49.45569362,49.3387854,50.129718,49.94784906,51.03357894,51.73021167,52.0211617,52.55805334,52.22956095,51.88844202,50.87410618,50.39506101,49.72117909],[ 48.37551433,48.30812683,48.45300884,48.50818535,47.76798967,47.21965588,47.60764424,48.21327283,48.52370448,49.95221655,49.7608777,50.1178807,50.15020093,49.4369175,49.16839811,49.31254753,48.03208233],[ 46.91675497,46.45280928,46.37122283,46.69881125,45.95493853,46.33296801,46.15091804,46.09862998,46.31676066,46.6199912,47.60040926,48.34096053,47.78005438,48.0951173,48.15291404,47.21140107,46.28884057]])

解决方法

我将不再使用股票cmap,而是完成自己的生产.

正如您已经发现的那样,为了在使用cmaps时绝对控制颜色(不通过颜色数组),cmap中的颜色数应该等于级数 – 1.

我们可以通过以下示例轻松演示这一点.让我们用三种基色制作一个色彩图:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy


data = numpy.arange(12).reshape(3,4)

cmap = mcolors.ListedColormap([(0,1),(0,0),(1,0)])

但是,当我们使用3 3级以外的任何其他值时,我们将得到您可能不会期望的结果:

plt.subplot(121)
plt.contourf(data,cmap=cmap,levels=[1,10])

plt.subplot(122)
plt.contourf(data,8])

plt.show()

所以我已经证明你的等级必须是n_colors-1的长度,但是因为我们想要有3种颜色,并且总是显示中间颜色,所以我们还必须具有偶数个等级.

好,现在我们有一些基本规则,让我们创建一个LinearSegmentedColormap,它实际上只是一个ListedColormap,插值为N种颜色:

levs = range(12)
assert len(levs) % 2 == 0,'N levels must be even.'

cmap = mcolors.LinearSegmentedColormap.from_list(name='red_white_blue',colors =[(0,1.,0)],N=len(levs)-1,)
plt.contourf(data,levels=levs)
plt.show()

我们可以通过编程验证normailzed cmap是否为白色作为中间颜色:

>>> print cmap(0.5)
(1.0,1.0,1.0)

希望这将为您提供所需的所有信息,以便您能够制作任何您喜欢的色彩图并在轮廓上成功使用它.

python – 创建一个白色居中的零色图的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. js中‘!.’是什么意思

  3. InnoDB 和 MyISAM 引擎恢复数据库,使用 .frm、.ibd文件恢复数据库

  4. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  5. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  6. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  7. 宝塔Linux的FTP连接不上的解决方法

    宝塔Linux的FTP连接不上的解决方法常见的几个可能,建议先排查。1.注意内网IP和外网IP2.检查ftp服务是否启动 (面板首页即可看到)3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 (如是腾讯云/阿里云等还需检查安全组)4.是否主动/被动模式都不能连接5.新建一个用户看是否能连接6.修改ftp配置文件 将ForcePassiveIP前面的#去掉 将19

  8. 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

  9. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  10. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部