MATLAB | MATLAB海洋、气象数据colormap配色补充包(NCL color tables)

news2025/7/17 21:14:14

众所周知,海洋、气象、水文等一系列学科绘制图像时,因很多时候涉及要将陆地海洋分开或者应对一些非常特殊的情况,因此有很多非常特别的colormap,我之前虽然做过一些常用colormap的补充包但是依旧是无法完全应对各种特殊的colormap,

而NCL(The NCAR Command Language)是一种专门为科学数据处理以及数据可视化设计的高级语言,很适合用在气象数据的处理和可视化上。该语言内置了一系列非常适合气象数据的colormap,于是我将其也做出了一个MATLAB colormap补充包!!


前言及所作工作

先说明如果不适用该补充包如何获取颜色数据,颜色数据是从官网:

  • https://www.ncl.ucar.edu/Document/Graphics/color_tables.shtml

获取的,该网址将内置colormap按照颜色特点做出了33个分类(例如:左侧白色,彩虹色,海洋山脉色,偏蓝色,偏绿色):

若是随便点开一个颜色就能进入该颜色展示界面:

之后点击新界面的.rgb链接就可以下载文件:

文件是.rgb格式,其实可以直接改为.txt进行读取,但是下载的颜色数据非常乱,有的需要删掉注释,有的是0-255范围有的是0-1范围:

而且每次都要去下载太麻烦了,于是我直接用MATLAB写了个p虫,先把txt格式都pa了下来:

function getNCL
% @author: slandarer
main_forder_name='NCL_RGB';
main_website_path='https://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml#SVG';
if ~exist(main_forder_name,'dir')
   mkdir(main_forder_name);
end

% 获取每一个面板位置
main_content=webread(main_website_path);
class_sep=[regexpi(main_content,'<a name='),length(main_content)];

className{length(class_sep)-1}='';
colorName{length(class_sep)-1}={''};
for i=1:length(class_sep)-1
    class_content=main_content(class_sep(i):class_sep(i+1));

    % 获取各类名称
    class_begin=10;
    class_end=regexpi(class_content,'></a>');
    class_name=class_content(class_begin:class_end(1)-2);
    className{i}=class_name;
    class_forder_name=['NCL_RGB\',class_name];
    if ~exist(class_forder_name,'dir')
        mkdir(class_forder_name);
    end

    % 获取每个示意图名称
    img_begin=regexpi(class_content,'Images/');
    img_end=regexpi(class_content,'_labelbar');

    % 循环获取颜色
    tColorNameCell={};
    disp(' ')
    for j=1:length(img_begin)
        color_name=class_content(img_begin(j)+7:img_end(j)-1);
        tColorNameCell{j}=color_name;
        color_website_path=['https://www.ncl.ucar.edu/Document/Graphics/ColorTables/Files/',color_name,'.rgb'];
        disp(['正在获取','Class(',num2str(i),')[',class_name,']->Color(',num2str(j),')[',color_name,']'])
        websave([class_forder_name,'\',color_name,'.txt'],color_website_path);
    end
    colorName{i}=tColorNameCell;
end
% save nclCM_Name.mat className colorName
end

之后经过一系列整合,终于有了此补充包。


颜色展示


使用方法

不指定获取颜色个数会默认返回长度为图示每个colormap左下角颜色数的颜色,每种colormap和一个右上角序号相对应。

举例获取[190]号cmocean_curl颜色,只输入一个参数返回的颜色长度就为256,以下两种写法等价:

  • nclCM(‘cmocean_curl’)
  • nclCM(190)

第二个参数可以指定获取颜色数量,例如获取30个颜色:

  • nclCM(‘cmocean_curl’,30)
  • nclCM(190,30)

将获取的颜色放入colormap函数或者某些图像的CData即可,例如:

  • colormap(nclCM(‘cmocean_curl’))

需要注意的是,为了更好的分类,有一两个颜色在不同类别多次出现,因此更推荐使用序号调用。


使用实例

demo1 随机生成曲面

使用cmocean_curl配色,200个颜色:

% demo1
X=linspace(0,1,200)';
CL=(-cos(X*2*pi)+1).^.2;
r=(X-.5)'.^2+(X-.5).^2;
surf(X,X',abs(ifftn(exp(7i*rand(200))./r.^.9)).*(CL*CL')*30,'EdgeColor','none')

% 67 458 190
colormap(nclCM('cmocean_curl',200))
light
material dull
view(59.1823,56.1559)

% 修饰一下
ax=gca;
ax.Projection='perspective';
ax.LineWidth=.8;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.ZMinorTick='on';
ax.GridLineStyle=':';
ax.FontName='Cambria';

当然第一个参数也可以换成序号190或者其他序号:

demo2 大地水准面高度

此demo需要mapping toolbox,不过在这只是为了展示换colormap,其他工具箱例如m_map也差不多类似的操作:

% demo2
% 需要mapping toolbox
% 大地水准面高度数导入
load geoid60c.mat

% 创建某经纬度范围世界地图坐标区域
latlim=[-50 50];
lonlim=[160 -30];
ax=worldmap(latlim,lonlim);


geoshow(ax,geoid60c,geoid60cR,'DisplayType','surface')
% 205 190 215
colormap(nclCM(215,20))
% colormap(nclCM(335,100))
colorbar

demo3 全球大地水准面高度

% demo3
% 需要mapping toolbox
[N,R] = egm96geoid;
axesm eckert4
Z=zeros(R.RasterSize);
geoshow(N,R,'DisplayType','surface','CData',N,'ZData',Z)
framem;gridm

% 215 190 150
% colormap(nclCM(215,20))
colormap(nclCM(150,20))
cb=colorbar('southoutside');
cb.Label.String = 'EGM96 Geoid Height in Meters';
geoshow('landareas.shp','FaceColor',[.5,.5,.5])

demo4 高程数据

% demo4
% 需要mapping toolbox
[Z,R]=readgeoraster('n39_w106_3arc_v2.dt1','OutputType','double');

key.GTModelTypeGeoKey  = 2;
key.GTRasterTypeGeoKey = 2;
key.GeographicTypeGeoKey = 4326;

filename='southboulder.tif';
geotiffwrite(filename,Z,R,'GeoKeyDirectoryTag',key)

usamap([39 40],[-106 -105])
g=geoshow(filename,'DisplayType','mesh');

% 190 300 363
colormap(nclCM(15,200))

demo5 曲线赋色

% demo5
t=linspace(0,5*pi,200);

% 116 190 402 162 
C=nclCM(15,50);
ax=gca;hold on 
for i=1:50
    plot(t,sin(t)+i.*.1,'Color',C(i,:),'LineWidth',2);
end

% 坐标区域修饰
ax.YLim=[0,5];
ax.XLim=[0,5*pi];
ax.YTick=0:.5:5;
ax.XTick=0:1:15;
% ax.XGrid='on';
ax.YGrid='on';
ax.GridLineStyle='-.';
ax.LineWidth=1.2;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.Box='on';
ax.FontName='Cambria';
ax.FontWeight='bold';
ax.FontSize=12;


可将该文件夹添加到搜索路径,这样任何地方都可以调用此函数:


接近五百组数据整理起来真真真真的巨累,希望大家该点赞的点赞,该在看的在看!!

未经允许本代码请勿作商业用途,引用的话可以引用我file exchange上的链接,可使用如下格式:

Zhaoxu Liu / slandarer (2022). ncl colormaps (https://www.mathworks.com/matlabcentral/fileexchange/120848-ncl-colormaps), MATLAB Central File Exchange. 检索来源 2022/11/19.

若转载请保留以上file exchange链接及本文链接!!!!!

完整数据及实例

【nclCM 487 colormaps】

更新时会跟进更新以下连接:
【链接】:https://pan.baidu.com/s/1s7WTRsQfUahufk6hVUuFRA?pwd=slan
【提取码】:slan

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言-基础

C-基础参考变量/常量左值/右值&#xff1f;&#xff1f;&#xff1f;字面量/常量变量作用域全局变量与局部变量作用域扩展 python数据与地址存储类autoregisterstaticextern数据类型基本类型整数类型进制数原码/补码/反码int 与 char数值溢出浮点类型字符型字符与整数字符与进制…

Selenium隐藏浏览器和元素截屏实践

文章目录隐藏浏览器介绍示例代码浏览器截图介绍示例代码对整个浏览器页面进行截屏指定特定HTML元素进行截屏隐藏浏览器 介绍 在使用Selenium采集网页数据时&#xff0c;需要不断地调用浏览器。实际上&#xff0c;通过对Selenium的设置&#xff0c;可以达到隐藏浏览器的效果。…

堆 (带图详解)

文章目录1.堆的基本概念1. 概念2.性质1.必须为完全二叉树2.满足大堆/小堆成立的条件3.存储方式1.逻辑结构2.物理结构4. 孩子与父亲之间下标的关系2.堆的基本实现1.push——插入1.代码2. 情况分析情况1情况23. 向上调整算法1.过程分析2. 临界条件的判断2. pop—— 删除1.代码2. …

[附源码]计算机毕业设计JAVA火车票订票管理系统

[附源码]计算机毕业设计JAVA火车票订票管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM myba…

【HDU No. 4006】 第k 大的数 The kth great number

【HDU No. 4006】 第k 大的数 The kth great number 杭电OJ 题目地址 【题意】 小明和小宝正在玩数字游戏。游戏有n轮&#xff0c;小明在每轮中都可以写一个数&#xff0c;或者问小宝第k 大的数是什么&#xff08;第k 大的数指有k -1个数比它大&#xff09;。 游戏格式为&am…

运维开发实践 - Docker - 容器实现原理

1.Docker容器是什么 按照Docker官网&#xff0c;容器是运行在宿主机上的一个进程&#xff0c;但与宿主机上的其他进程相隔离&#xff1b; 2.容器实现原理 这种隔离机制使用了内核中的namespace和cgroups功能&#xff1b; 2.1.Linux namespace Linux通过将系统的资源放置在…

Redis数据类型之string

文章目录stringⅠ. 增删查改Ⅱ. 加减操作Ⅲ. 数据生命周期Ⅳ. 业务场景 - 高频数据Ⅴ. 注意事项提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 string ● 存储的数据&#xff1a;单个数据&#xff0c;最简单的数据存储类型&#xff0c;也是最常…

Paket在Linux下使用问题

1. 系统软件版本 Linux系统&#xff1a;Debian 10&#xff0c;需安装mono-devel Paket版本&#xff1a;7.1.5 关于Paket的介绍&#xff1a;https://github.com/fsprojects/Paket Paket的发布版本&#xff1a;https://github.com/fsprojects/Paket/releases 2. 使用方法 将…

原来背后都是商业利益,看到网易和暴雪的解约之后,原来是要定以后的KPI,坐地起价,但是一个时代已经结束了,都留在了记忆之中

1&#xff0c;大瓜新闻&#xff0c;2023年1月暴雪游戏中国将不会续约&#xff1f;&#xff1f; 2&#xff0c;原因是主要坐地起价&#xff0c;提高分成设置KPI 还好网易有自研游戏&#xff0c;估计早知道会有现在这样的情况。 提前做好了准备。还记得有个公司叫 九城吗&#x…

Linux操作系统~带你理解文件系统与软硬链接

目录 1.C语言中的FILE和文件描述符对应的file 2.Linux的EXT系列的文件系统 &#xff08;1&#xff09;.block group中六个部分的内容 inode索引结点相关 Q&#xff1a;这两个inode有什么不同&#xff1f; &#xff08;2&#xff09;.一个文件的inode和对应的block如何关联…

off-by-one (b00ks)

前言 个人简略记录&#xff0c;过程不详细 gdb开始调试 vmmap查看程序基地址为 0x555555400000 继续运行&#xff0c;输入auth search hollk关键字&#xff0c;auth存放的地址可以找出为&#xff1a;0x555555602040 圈起来的是溢出的 \x00 创建两个books 因为图书的结构体指…

数据库以及数据库常用概念、ER模型相关概念

目录 1.我们为什么要学习数据库&#xff1f; 2.数据库的相关概念&#xff1a; 2.关系型数据库和非关系型数据库的区别 A.关系型数据库&#xff1a; B.非关系型数据库&#xff1a; C.非关系型数据库的相关类别有以下几种&#xff1a; 3.关系型数据库设计规则 4.表、记录、…

华为数据中心VS技术理论讲解

目录 VS之间的关系 VS的配置管理权限 VS之间、VS与外部通信 VS资源分配 VS与其它技术的联合部署 VS的创建和删除 VS&#xff08;Virtual System&#xff09;虚拟系统是指将一台物理设备虚拟成多个相互隔离的逻辑设备 逻辑设备之间软硬件隔离&#xff0c;互不影响&#xff…

立体式校验保护,让你的系统避免 90% 以上的 bug

1. 概览 在实际开发过程中&#xff0c;数据校验是最为重要的一环&#xff0c;问题数据一旦进入系统&#xff0c;将对系统造成不可估量的损失。轻者&#xff0c;查询时触发空指针异常&#xff0c;导致整个页面不可用&#xff1b;重者&#xff0c;业务逻辑错误&#xff0c;造成流…

为了买个硬盘,我专门写了篇笔记

文章目录SSD是固态硬盘的一些参数插槽接口总线类型传输协议插槽接口/总线/协议关联参考连接HDD是机械硬盘&#xff1b;SSD是固态硬盘。 SSD是固态硬盘的一些参数 插槽接口 外观不同而已&#xff1b;插槽接口不影响传输速度&#xff0c;但是插槽接口不适配的话是肯定插不到电脑…

力扣(LeetCode)12. 整数转罗马数字(C++)

模拟 罗马数字和掰手指数数的区别在于&#xff0c;IV/IXIV/IXIV/IX 这类倒着数数的&#xff0c;和阿拉伯数字最大的区别在于 555 的 10k10^k10k 倍 k∈Nk\isin Nk∈N &#xff0c;需要被表示出来。所以除了记录 I/X/C/MI/X/C/MI/X/C/M ——1/10/100/10001/10/100/10001/10/100…

activiti-image-generator

activiti-image-generator目录概述需求&#xff1a;设计思路实现思路分析1.ActivitiImageException2.ProcessDiagramGenerator3.ProcessDiagramSVGGraphics2D4.ProcessDiagramDOMGroupManager5.DefaultProcessDiagramGenerator参考资料和推荐阅读Survive by day and develop by…

Smart point智能指针(part.1)

1&#xff1a;为什么出现智能指针   为了避免多个指针指向一个对象的时候 销毁其中一个point 其他的point就会变成空point 或者多次删除被指向对象而发生报错   或者单纯删除指针 不删除其指向的对象 当最后一个指向对象被删除的时候 对象依然存在 造成资源泄露  智能指针…

MATLAB continue语句

详细例子&#xff1a; 在MATLAB中建立一个脚本文件&#xff0c;并输入下述代码&#xff1a; a 10; %while loop execution while a < 20if a 15% skip the iteration a a 1;continue;endfprintf(value of a: %d , a);a a 1; end 运行该文件&#xff0c;显示下…

unet医学肺部ct图分割简单记录

UNet医学图像分割 说明&#xff1a; 本项目采用pytorch——gpu——cuda11.6本项目用的UNet网络架构一、硬件&#xff1a; Windows GPU 二、软件环境安装&#xff1a; pytorchNibabel 三、用法&#xff1a; 医学数据采集为kaggle的官网新冠肺炎ct图数据预处理&#xff1a;1…