Matlab科研绘图:自定义内置多款配色函数

在Matlab科研绘图中,自定义和使用内置的多款配色函数可以极大地增强图表的视觉效果和数据的可读性。本文将介绍配色函数,共计带来6套配色体系,而且后续可以根据需要修改,帮助大家自定义和使用配色函数。

1.配色函数

可以根据个人喜好或科研需求自定义配色方案,例如可以定义一个名为diycolor的函数,该函数接受整数输入并返回相应的自定义颜色。在绘图时,可以通过调用这个函数来获取和使用自定义颜色。本文提供的配色函数具体代码如下:

Matlab 复制代码
function colors = iy_color(input, positions)
% IY_COLOR 生成自定义颜色映射.
%
%   COLORS = IY_COLOR(INPUT) 生成基于指定输入参数的自定义颜色映射。
%   INPUT 是一个整数,用于描述所需的颜色映射类型。
%   该函数返回生成的颜色映射作为一个颜色矩阵。
%
%   INPUT 参数的说明:
%     - 1: 综合颜色映射,包含多种颜色,从蓝色到深红色,再到灰色和深色。这个颜色映射提供了多样的颜色选择,可用于不同的应用。
%     - 2: 蓝色色系,从浅到深,共计20个颜色。
%     - 3: 绿色色系,从浅到深,共计20个颜色。
%     - 4: 红色色系,从浅到深,共计20个颜色。
%     - 5: 黄色色系,从浅到深,共计20个颜色。
%     - 6: 紫色色系,从浅到深,共计20个颜色。
%
%   COLORS = IY_COLOR(INPUT, POSITIONS) 可以使用 POSITIONS 参数来指定在生成的
%   颜色映射中选择哪些颜色。POSITIONS 应为整数或整数向量,表示所需颜色的位置。
%
%   示例:
%     - colormap = iy_color(1); % 生成综合颜色映射。
%     - colormap = iy_color(2, [1, 10, 15]); % 从浅蓝色到浅蓝色,选择指定位置的颜色。
%
%   请注意:在输入 INPUT 和 POSITIONS 时,请确保参数的有效性。
%
%   此外,如果想查看某个色系具体的颜色,您可以通过 color_all(INPUT),显示对应色系的颜色,它的输出是一张图片,给出了当前色系的所有颜色。
%
%   实例:
%     - color_all(1) 输出综合颜色

colormap1 = [ % 50种颜色
    0 0 1; 
    0 0.5 0; 
    1 0 0; 
    0 0.75 0.75; 
    1 0 1; 
    1 0.5 0; 
    0.5 0 1; 
    0.5 0.5 0; 
    0 1 1; 
    0 1 0; 
    0.75 0.75 0; 
    0 0 0; 
    0.5 0.5 0.5; 
    0.6 0.2 0.2; 
    0.2 0.6 0.2; 
    0.2 0.2 0.6; 
    0.8 0.8 0; 
    0.8 0 0.8; 
    0 0.8 0.8; 
    0.5 0.5 0.2; 
    0.5 0.2 0.5; 
    0.2 0.5 0.5; 
    0.9 0.6 0.2; 
    0.9 0.2 0.6; 
    0.2 0.9 0.6; 
    0.7 0.7 0.7; 
    0.8 0.4 0.1; 
    0.4 0.8 0.1; 
    0.4 0.1 0.8; 
    0.1 0.4 0.8; 
    0.8 0.1 0.4; 
    0.1 0.8 0.4; 
    0.2 0.7 0.2; 
    0.7 0.2 0.2; 
    0.2 0.2 0.7; 
    0.4 0.5 0.8; 
    0.8 0.4 0.5; 
    0.5 0.8 0.4; 
    0.7 0.4 0.4; 
    0.4 0.4 0.7; 
    0.4 0.7 0.4; 
    0.8 0.6 0.2; 
    0.8 0.2 0.6; 
    0.2 0.8 0.6; 
    0.6 0.2 0.8; 
    0.2 0.6 0.8; 
    0.6 0.8 0.2; 
    0.4 0.1 0.2; 
    0.1 0.4 0.2; 
    0.2 0.4 0.1; 
    ];

colormap2 = [ % 蓝色色系,由浅到深色,共计20个
    0.9 0.9 1;
    0.85 0.85 1;
    0.8 0.8 1;
    0.75 0.75 1;
    0.7 0.7 1;
    0.65 0.65 1;
    0.6 0.6 1;
    0.55 0.55 1;
    0.5 0.5 1;
    0.45 0.45 1;
    0.4 0.4 1;
    0.35 0.35 1;
    0.3 0.3 1;
    0.25 0.25 1;
    0.2 0.2 1;
    0.15 0.15 1;
    0.1 0.1 1;
    0.05 0.05 1;
    0 0 1;
    0 0 0.9;
];

colormap3 = [ % 绿色色系,由浅到深色,共计20个
    0.85 1 0.85; 
    0.8 1 0.8;  
    0.75 1 0.75; 
    0.7 1 0.7; 
    0.65 1 0.65; 
    0.6 1 0.6;  
    0.55 1 0.55; 
    0.5 1 0.5; 
    0.45 1 0.45; 
    0.4 1 0.4; 
    0.35 1 0.35; 
    0.3 1 0.3;  
    0.25 1 0.25; 
    0.2 1 0.2;
    0.15 1 0.15;
    0.1 1 0.1;  
    0.05 1 0.05;
    0 1 0; 
    0 0.95 0;  
    0 0.9 0; 
];

colormap4 = [ % 红色色系,由浅到深色,共计20个
    1 0.85 0.85; 
    1 0.8 0.8;  
    1 0.75 0.75; 
    1 0.7 0.7;  
    1 0.65 0.65; 
    1 0.6 0.6;  
    1 0.55 0.55; 
    1 0.5 0.5; 
    1 0.45 0.45; 
    1 0.4 0.4;  
    1 0.35 0.35;  
    1 0.3 0.3;   
    1 0.25 0.25;  
    1 0.2 0.2;  
    1 0.15 0.15; 
    1 0.1 0.1;  
    1 0.05 0.05; 
    1 0 0;  
    0.95 0 0;  
    0.9 0 0;  
];
colormap5 = [ % 黄色色系,由浅到深色,共计20个
    1 1 0.85; 
    1 1 0.8; 
    1 1 0.75; 
    1 1 0.7;  
    1 1 0.65;  
    1 1 0.6;  
    1 1 0.55; 
    1 1 0.5;  
    1 1 0.45; 
    1 1 0.4;  
    1 1 0.35; 
    1 1 0.3;  
    1 1 0.25; 
    1 1 0.2;  
    1 1 0.15; 
    1 1 0.1;  
    1 1 0.05; 
    1 1 0;    
    0.95 0.95 0; 
    0.9 0.9 0;
];
colormap6 = [ % 紫色色系,由浅到深色,共计15个
    0.9 0.85 1; 
    0.85 0.75 1; 
    0.8 0.65 1; 
    0.75 0.55 1; 
    0.7 0.45 1; 
    0.65 0.35 1; 
    0.6 0.25 1;  
    0.55 0.15 1; 
    0.5 0.05 1; 
    0.45 0 0.9;
    0.4 0 0.8;  
    0.35 0 0.7; 
    0.3 0 0.6;  
    0.25 0 0.5;  
    0.2 0 0.4;  
];
    
    % 为每个 colormap 定义一个 cell 数组
    colormaps = {colormap1, colormap2, colormap3, colormap4, colormap5, colormap6};
    
    % 选择 colormap
    if isscalar(input) && input >= 1 && input <= numel(colormaps)
        selected_colormap = colormaps{input};
    else
        error('请输入有效的 colormap 索引。');
    end

    % 获取指定位置的颜色
    num_colors = size(selected_colormap, 1);
    if nargin < 2
        positions = 1:num_colors;
    end
    
    if isvector(positions) && all(positions >= 1 & positions <= num_colors)
        colors = selected_colormap(positions, :);
    else
        error('位置必须是介于 1 到 %d 之间的整数或整数矩阵。', num_colors);
    end
end

2.配色函数使用说明

iy_color 生成自定义颜色映射,COLORS = iy_color(INPUT) 生成基于指定输入参数的自定义颜色映射。INPUT 是一个整数,用于描述所需的颜色映射类型,该函数返回生成的颜色映射作为一个颜色矩阵。

INPUT 参数的说明:

-- 1: 综合颜色映射,包含多种颜色,从蓝色到深红色,再到灰色和深色。这个颜色映射提供了多样的颜色选择,可用于不同的应用。

-- 2: 蓝色色系,从浅到深,共计20个颜色。

-- 3: 绿色色系,从浅到深,共计20个颜色。

-- 4: 红色色系,从浅到深,共计20个颜色。

-- 5: 黄色色系,从浅到深,共计20个颜色。

-- 6: 紫色色系,从浅到深,共计20个颜色。

COLORS = iy_color(INPUT, POSITIONS) 可以使用 POSITIONS 参数来指定在生成的颜色映射中选择哪些颜色。POSITIONS 应为整数或整数向量,表示所需颜色的位置。

示例:

-- colormap = iy_color(1); % 生成综合颜色映射。

-- colormap = iy_color(2, 1, 10, 15); % 从浅蓝色到浅蓝色,选择指定位置的颜色。

在输入 INPUT 和 POSITIONS 时,请确保参数的有效性。此外,如果想查看某个色系具体颜色,可以通过 color_all(INPUT),显示对应色系的颜色,它的输出是一张图片,给出了当前色系的所有颜色。可以通过help iy_color或者doc iy_color查看帮助文件。

3.颜色色系查看函数

本文还提供如下函数,以用于查看各色系具体的颜色值,它的输出是对应色系的所有颜色,以图片方式显示每个编号对应的颜色。

Matlab 复制代码
function color_all(colorIndex)
% 根据用户传递的colorIndex参数设置colormap
colormap = iy_color(colorIndex);

% 获取 colormap 的列数
num_columns = size(colormap, 1);

% 创建颜色代码
colorCodes = 1:num_columns;

% 定义参数
colorBlockSize = 40;  % 每个颜色块的大小
colorsPerRow = 10;    % 每行包含的颜色数
colorSpacing = 20;    % 颜色之间的间隔
groupSpacing = 30;    % 每组颜色之间的间隔

% 计算图像大小
imageWidth = (colorsPerRow * colorBlockSize) + ((colorsPerRow - 1) * colorSpacing);
imageHeight = (ceil(numel(colorCodes) / colorsPerRow) * colorBlockSize) + ...
    (ceil(numel(colorCodes) / colorsPerRow - 1) * groupSpacing);

% 创建颜色列表图
figure;
set(gcf, 'Position', [100, 100, imageWidth, imageHeight]);
hold on;

for i = 1:numel(colorCodes)
    % 计算当前颜色块的位置
    row = ceil(i / colorsPerRow);
    col = mod(i - 1, colorsPerRow) + 1;
    
    % 计算颜色块左下角的坐标
    x = (col - 1) * (colorBlockSize + colorSpacing);
    y = (row - 1) * (colorBlockSize + groupSpacing);
    
    % 获取当前颜色
    color = colormap(i,:);
    
    % 绘制颜色块
    rectangle('Position', [x, y, colorBlockSize, colorBlockSize], 'FaceColor', color);
    
    % 显示颜色代码
    text(x + colorBlockSize / 2, y - 10, num2str(colorCodes(i)), 'HorizontalAlignment', 'center');
end

axis off;
hold off;
end

使用方法:color_all(1)输出1号色系所有颜色,以此类推。具体输出的颜色色系展示如下:

通过上述方法,可以在Matlab中灵活地自定义和使用多种配色方案,以满足科研绘图的需求。

相关推荐
吃好睡好便好7 小时前
查找函数的使用
学习·算法·matlab·生活·查找函数
学习星球7 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
靠沿8 小时前
贪心算法专题(二)
算法·贪心算法
猎头南楼9 小时前
具身智能模型部署方向的能力要求与技术栈梳理
人工智能·深度学习·算法
啥都想学点的研究生10 小时前
一篇文章讲清楚:线性回归问题的求解——正规方程法
算法·机器学习·线性回归
青少儿编程课堂10 小时前
树状数组精讲:逆序对计数与离散化(附双语言解法)
算法·树状数组·离散化·信息学奥赛·逆序对
血小板要健康10 小时前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
VALENIAN瓦伦尼安教学设备11 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法
小小晓.11 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
怕浪猫11 小时前
用了两年 AI 编程工具后,我重新理解了什么是「资深工程师」
算法·面试·架构