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

4.7
(3)

前文中,给大家提供了一个50种配色的函数,方便在画图的时候调用,感兴趣的可以参考文章:《Matlab科研绘图:50种配色分享,附完整代码》。本文,将重写配色函数,共计带来6套配色体系,而且后续可以自己随意修改。其中,第一套为上一篇文章中的50中配色,第二到第六套分别为:蓝色、绿色、红色、黄色、紫色,从浅色到深色。此外,提供了显示各色系每个颜色的函数。

配色函数

本次提供的配色函数具体代码如下:

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) 输出综合颜色
%
% 作者:gugechor 冰沫记
% 日期:2023年11月2日

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

配色函数使用说明

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) 输出综合颜色

作者:gugechor 冰沫记
日期:2023年11月2日

可以通过help iy_color或者doc iy_color查看帮助文件。

颜色色系查看函数

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

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科研绘图:自定义内置多款配色函数

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/16157.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2023年11月02日 17:42
下一篇 2023年11月03日 11:09

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号