Bootstrap

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

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

1.配色函数

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

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.颜色色系查看函数

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

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中灵活地自定义和使用多种配色方案,以满足科研绘图的需求。

;