当前位置: 首页 > article >正文

SCI绘图技巧(2):MATLAB中自定义Colormap及其调用方法

本文主要介绍如何在MATLAB中创建和调用自己的Colormap。主要包括四个方面:Colormap的简介、颜色模式的介绍、如何自定义Colormap以及Colormap的保存和调用。

1. Colormap简介

  • Colormap:即色图,决定每个figure的颜色。
  • Colormap的输入是一个包含任意行、三列(mx3)的矩阵,每行的3个值都为0-1之间的数字,分别代表颜色组成的分量,通过改变其值就可以改变Colormap相应的颜色。
  • 常见的MATLAB内置的colormap:GRAY, HOT, COOL, BONE, COPPER, PINK, FLAG, PRISM, JET。
  • MATLAB中colormap函数的相关语法
colormap(map)            % 用map矩阵映射当前图形的色图。
colormap('default')      % 将颜色设置为系统默认值
cmap= colormap            % 返回当前图窗的颜色图,形式为RGB三元组组成的三列矩阵

    由于系统自带的colormap有限,用户可以自定义自己的colormap,那如何定义呢?请继续往下看。

    2. 颜色模式

    • 要想绘制自己的colormap,必须得先了解成色原理。
    • 颜色模式是用数字形式记录颜色的方式,常用的有RGB模式和HSV模式。

    (1)RGB色彩模式

            通过颜色发光原理设定,有红(R)、绿(G)、蓝(B)三种颜色,利用这三种颜色的加法混合,产生各种各样的颜色

    • 可以理解为采用直角坐标系来描述色彩
    • RGB的每个颜色分量在[0,255]之间。
    • MATLAB的将RGB的每个分量的值设定在[0,1]之间。

    (2)HSV的色彩模式

            又称HSB,H表示色相,S表示纯度(饱和度),V表示明度(亮度),比较符合人的视觉感受

    • 可以理解为利用柱坐标(或锥坐标)来描述色彩
      • 轴向表示亮度,自上而下由白变黑
      • 径向表示色饱和度,自内向外逐渐变高
      • 圆周方向,则表示色调的变化,形成色环
    • 和RGB一样,MATLAB中HSV颜色也是由3个[0,1]区间的值构成的行向量定义。
    • RGB和HSV的格式转换如下:
    %两种颜色模式的互相转换
    color_hsv=rgb2hsv(color_rgb)
    color_rgb=hsv2rgb(color_hsv)

    3. MATLAB中自己创建Colormap

    以RGB颜色模式为例,自己创建Colormap。

    (1)自定义colormap

    定义一个由介于 0.0 和 1.0 之间的值组成的三列矩阵。每行定义一个三元素 RGB 三元组。第一列指定红色强度。第二列指定绿色强度。第三列指定蓝色强度。

    (2)如何创建colormap的矩阵

            ① 在MATLAB颜色编辑器中进行修改

    打开MATLAB的颜色编辑器,设置好关键节点的颜色,节点之间自动进行了插值处理,设计好后将colormap导出到工作区

            ② 通过代码定义(以三种颜色渐变的colormap为例,这里选择红、黄、蓝,采用简单的线性插值进行定义)

    close all; clear; clc;
    figure; % 创建一个新图形窗口
    
    % ==1.定义三种颜色的 RGB 值==
    Col_1 = [0.9453125, 0, 0];  %红色     
    Col_2 = [1, 1, 0];          %黄色        
    Col_3 = [0.078125, 0, 0.55859375]; %蓝色 
    
    % ==2.创建一个 3×3 的颜色矩阵,每行对应一种颜色的 RGB 值==
    C = zeros(3, 3); % 初始化 3×3 矩阵
    C(1, :) = Col_3; % 第一行设置为蓝色
    C(2, :) = Col_2; % 第二行设置为黄色
    C(3, :) = Col_1; % 第三行设置为红色
    
    % ==3.绘制一个简单的矩形区域,用于演示颜色映射的效果==
    x1 = [0 0 1 1]; % 矩形的 x 坐标
    x2 = [0 1 1 0]; % 矩形的 y 坐标
    c = [0 0 1 1];  % 矩形的颜色(此处无实际意义,仅用于 fill 函数)
    fill(x1, x2, c); % 使用填充颜色绘制矩形
    hold on; % 保持当前绘图,方便后续添加元素
    
    % ==4. 定义需要生成的颜色数量==
    N = 363; % 将颜色映射分为 363 个颜色点(通常对应 8 位颜色深度)
    
    % ==5.使用线性插值生成颜色渐变映射==
    % linspace(1, N, size(C, 1)):生成对应 C 矩阵行数的插值节点
    
    % C:颜色矩阵,表示插值时的已知数据点
    % 1:N:生成 1 到 N5 的颜色映射,返回一个 N×3 的矩阵
    map = interp1(linspace(1, N, size(C, 1)), C, 1:N);
    
    % ==6.将生成的颜色映射设置为当前图形窗口的颜色映射==
    colormap(map);
    % 显示颜色条,用于直观展示颜色映射效果
    colorbar;
    
    % 说明:最终绘图窗口中,矩形将应用定义的颜色映射。颜色条(colorbar)将展示从红色渐变到黄色,再到蓝色的 363 阶梯颜色映射
    

    4. 自己创建的Colormap的保存和调用

    (1)自定义Colormap文件和值的保存

    • 方式一 直接另存为
      • 在设置好自己需要的颜色样式后,将其保存在我们的工作区
      • 右键空白处,修改文件名,将其保存为.mat格式

    • 方式二 使用save程序在命令行窗口保存
    mymap = get(gcf,'Colormap');  
    save('MyColormaps','mymap');  %把mymap变量(已有颜色图)保存到MyColormaps.mat,位置在matlab当前目录。MyColormaps.mat是文件名,mymap是具体颜色图值,记得自行修改名称,防止发生文件覆盖
    

    (2)Colormap的导入和调用

    • 方式一:手动调用
      • 先运行程序绘图(一定要绘制出Figure)——点击MATLAB左上角的“打开”——点击要用得到myColormap.mat文件,其会出现右边的工作区
      • 或者输入load('myColormap.mat', 'mymap'),其中,myColormaps.mat是文件名,mymap是需要调用的具体值
      • 在绘制的Figure中点击“编辑”——选择“颜色图”——点击“导入”——选择需要的colormap,导入即可。

    图 使用自定义颜色前后对比
    • 方法二:运行绘图后,在命令行依次运行如下程序
    % 加载自定义颜色图文件,myColormaps改为自己的colormap名称
    load('myColormaps.mat', 'mymap');
    
    % 应用自定义颜色图
    colormap(mymap); %上面那段是加载,这段是应用到图像上
    % 添加颜色条
    colorbar;
    • 方法三:程序进阶版
     % 创建一个新的图形窗口
        figure;
        surf(peaks);%这里是方便衔接理解画的图,创建窗口后输出图像
     
     
    % 加载自定义颜色图文件
    load('myColormaps.mat', 'mymap');%MyColormaps.mat是文件,mymap是具体值,作为固定搭配
    % 应用自定义颜色图
    colormap(mymap); %上面是加载,这里是应用到图像上
    % 添加颜色条
    colorbar;

      参考:

      [1] colormap

      [2]  颜色模式_百度百科

      [3] RGB(颜色系统)_百度百科

      [4] HSB色彩模式_百度百科

      [5] 简单讲一下四种颜色模式的应用 - 知乎

      [6] Matlab中如何定义和使用colormap?|colormap的使用-CSDN博客

      [7] matlab 的 colormap 函数_matlab colormap-CSDN博客

      [8] 利用matlab构建自己的colormap(色彩搭配)_matlab colormap-CSDN博客

      [9] matlab保存和调用自定义颜色图colormap_matlab colormap-CSDN博客


      http://www.kler.cn/a/522360.html

      相关文章:

    • 本地部署deepseek模型步骤
    • Python学习之旅:进阶阶段(五)数据结构-双端队列(collections.deque)
    • 初始JavaEE篇 —— Spring Web MVC入门(上)
    • DAY02 final关键字、static关键字、接口
    • GL C++显示相机YUV视频数据使用帧缓冲FBO后期处理,实现滤镜功能。
    • GBase 8a 9.5.3.27 DBlink配置---源端GBase
    • 【go语言】数组和切片
    • C语言导航 8.*自定义类型
    • Linux:文件与fd(未被打开的文件)
    • 论文阅读笔记:VMamba: Visual State Space Model
    • 滤波电路汇总
    • docker-compose的方式搭建 kafka KRaft 模式集群
    • python安装新版本
    • 智能物流管理|基于springboot的智能物流管理系统(源码+数据库+文档)
    • hadoop集群的安装与部署
    • C# OpenCV机器视觉:图像去雾
    • TensorFlow 简介
    • Java 编程初体验
    • 复杂任务 “大作战”:项目管理系统来 “救场
    • 03-机器学习-数据获取
    • 计算机网络——OSI和TCP/IP模型
    • uniapp 地图添加,删除,编辑标记,在地图中根据屏幕范围中呈现标记
    • 深度学习|表示学习|卷积神经网络|详细推导每一层的维度变化|14
    • 项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)
    • Golang Ticker Reset异常的坑
    • 第一届“启航杯”网络安全挑战赛WP