Matlab产生常见颜色

使用Matlab函数选择常见颜色的RGB值用于绘图等

Matlab自带的颜色种类太少了,只有 r/g/b/c/m/y/k等,而且过于饱和的颜色用来画图并不好看。

现在也有Matlab的颜色插件,大部分的思路是选择一个颜色套系(colormap),然后在其中选择几个不同的颜色。这样画图的线条颜色风格确实比较一致,但是颜色的选择不够自由,而且可能需要一个个试才知道某个颜色实际是什么颜色。

而且这些插件还不够简单,或者需要安装或购买。最简单的颜色生成方法就是:输入一个颜色名称,然后函数输出对应的RGB值,同时提供颜色调色盘方便选择哪个颜色,其实只是一个cell操作就能解决的事情。

声明:所有脚本来源于豆包AI生成后修改,自己用着没问题,不能完全保证正确性。

RGB名字和RGB颜色库生成文件(.m脚本)

  1. 考虑到比较常见且数量足够的颜色库是html标准颜色库,这里让AI总结html颜色表,总计94个,应该是够多了。
  2. 如果你想继续加入颜色,务必保证所有RGB值和颜色名字在各自cell中的顺序是一一对应的。
  3. 每个颜色的名字都是html标准颜色,名字格式为大驼峰法(例如 AaaBbbCcc)。
  4. RGB值已经归一化,取值为0~1的小数。如果要转换成常见的RGB色彩值,乘256即可。所有色彩在RGB256基准下都是整数
  5. 所有的色彩将会被绘制成色环,并标注颜色名,这样可以方便地选取颜色。
  6. 该脚本会保存以下数据:第一,色彩库 clrmap.mat(94×2 cell变量名为clrmap,第一列为名称(string),第二行为RGB值(1×3 double matrix));第二,色环图,分别保存为fig和jpg格式,名称为fcolor。

以下是脚本 colorgen.m

%% 自己添加任意颜色

clrrgb = {
    % 品红系(Magenta)
    [255, 0, 255]./256;      % Magenta
    [255, 105, 180]./256;    % HotPink
    [255, 20, 147]./256;     % DeepPink
    [199, 21, 133]./256;     % MediumVioletRed
    [219, 112, 147]./256;    % PaleVioletRed
    [238, 130, 238]./256;    % Violet
    [255, 192, 203]./256;    % Pink
    [255, 182, 193]./256;    % LightPink
  
    % 红色系(Red)
    [255, 0, 0]./256;        % Red
    [220, 20, 60]./256;      % Crimson
    [178, 34, 34]./256;      % FireBrick
    [139, 0, 0]./256;        % DarkRed
    [128, 0, 0]./256;        % Maroon
    [255, 99, 71]./256;      % Tomato
    [255, 127, 80]./256;     % Coral
    [255, 160, 122]./256;    % LightSalmon
    [255, 128, 128]./256;    % LightCoral
  
    % 橙色系(Orange)
    [255, 165, 0]./256;      % Orange
    [255, 140, 0]./256;      % DarkOrange
    [255, 69, 0]./256;       % OrangeRed
    [255, 215, 0]./256;      % Gold
    [184, 134, 11]./256;     % GoldenRod
    [255, 128, 0]./256;      % Orange
    [210, 105, 30]./256;     % Chocolate
    [160, 82, 45]./256;      % Sienna
    [139, 69, 19]./256;      % SaddleBrown
    [165, 42, 42]./256;      % Brown
    [139, 35, 35]./256;      % FireBrick
  
    % 黄色系(Yellow)
    [255, 255, 0]./256;      % Yellow
    [173, 255, 47]./256;     % GreenYellow
    [154, 205, 50]./256;     % YellowGreen
    [240, 230, 140]./256;    % Khaki
    [255, 250, 205]./256;    % LemonChiffon
    [255, 255, 224]./256;    % LightYellow
    [250, 250, 210]./256;    % LightGoldenRodYellow
    [245, 245, 220]./256;    % Beige
    [255, 248, 225]./256;    % Cornsilk
    [255, 240, 245]./256;    % LavenderBlush
    [255, 228, 181]./256;    % Moccasin
    [255, 222, 173]./256;    % NavajoWhite
    [255, 218, 185]./256;    % PeachPuff
    [255, 228, 196]./256;    % Bisque
    [255, 208, 184]./256;    % Moccasin
    [255, 192, 128]./256;    % LightSalmon
  
    % 绿色系(Green)
    [0, 255, 0]./256;        % Lime
    [50, 205, 50]./256;      % LimeGreen
    [0, 128, 0]./256;        % Green
    [34, 139, 34]./256;      % ForestGreen
    [46, 139, 87]./256;      % SeaGreen
    [85, 107, 47]./256;      % DarkOliveGreen
    [144, 238, 144]./256;    % LightGreen
    [152, 251, 152]./256;    % PaleGreen
    [128, 255, 128]./256;    % LightGreen
    [0, 255, 128]./256;      % SpringGreen
    [60, 179, 113]./256;     % MediumSpringGreen
    [128, 128, 0]./256;      % Olive
  
    % 青色系(Cyan)
    [0, 255, 255]./256;      % Cyan
    [0, 139, 139]./256;      % DarkCyan
    [32, 178, 170]./256;     % LightSeaGreen
    [175, 238, 238]./256;    % PaleTurquoise
    [0, 128, 128]./256;      % Teal
    [128, 255, 255]./256;    % LightCyan
    [240, 255, 255]./256;    % Azure
    [240, 255, 240]./256;    % HoneyDew
  
    % 蓝色系(Blue)
    [0, 0, 255]./256;        % Blue
    [0, 0, 205]./256;        % MediumBlue
    [0, 0, 139]./256;        % DarkBlue
    [25, 25, 112]./256;      % MidnightBlue
    [0, 69, 255]./256;       % DodgerBlue
    [0, 191, 255]./256;      % DeepSkyBlue
    [135, 206, 235]./256;    % SkyBlue
    [135, 206, 250]./256;    % LightSkyBlue
    [173, 216, 230]./256;    % LightBlue
    [70, 130, 180]./256;     % SteelBlue
    [100, 149, 237]./256;    % CornflowerBlue
    [64, 164, 223]./256;     % RoyalBlue
    [240, 248, 255]./256;    % AliceBlue
    [248, 248, 255]./256;    % GhostWhite
    [255, 248, 240]./256;    % FloralWhite
    [255, 228, 225]./256;    % MistyRose
  
    % 紫色系(Purple)
    [128, 0, 128]./256;      % Purple
    [138, 43, 226]./256;     % BlueViolet
    [123, 104, 238]./256;    % MediumSlateBlue
    [147, 112, 219]./256;    % MediumPurple
    [186, 85, 211]./256;     % MediumOrchid
    [128, 0, 255]./256;      % Indigo
    [128, 128, 255]./256;    % SlateBlue
    [255, 128, 255]./256;    % Pink
  
    % 黑白灰色系(亮→暗)
    [255, 255, 255]./256;    % White
    [255, 250, 240]./256;    % Snow
    [255, 255, 240]./256;    % Ivory
    [192, 192, 192]./256;    % Silver
    [128, 128, 128]./256;    % Gray
    [0, 0, 0]./256           % Black
};

clrname = {
    % 品红系(Magenta)
    "Magenta";
    "HotPink";
    "DeepPink";
    "MediumVioletRed";
    "PaleVioletRed";
    "Violet";
    "Pink";
    "LightPink";
  
    % 红色系(Red)
    "Red";
    "Crimson";
    "FireBrick";
    "DarkRed";
    "Maroon";
    "Tomato";
    "Coral";
    "LightSalmon";
    "LightCoral";
  
    % 橙色系(Orange)
    "Orange";
    "DarkOrange";
    "OrangeRed";
    "Gold";
    "GoldenRod";
    "Orange";
    "Chocolate";
    "Sienna";
    "SaddleBrown";
    "Brown";
    "FireBrick";
  
    % 黄色系(Yellow)
    "Yellow";
    "GreenYellow";
    "YellowGreen";
    "Khaki";
    "LemonChiffon";
    "LightYellow";
    "LightGoldenRodYellow";
    "Beige";
    "Cornsilk";
    "LavenderBlush";
    "Moccasin";
    "NavajoWhite";
    "PeachPuff";
    "Bisque";
    "Moccasin";
    "LightSalmon";
  
    % 绿色系(Green)
    "Lime";
    "LimeGreen";
    "Green";
    "ForestGreen";
    "SeaGreen";
    "DarkOliveGreen";
    "LightGreen";
    "PaleGreen";
    "LightGreen";
    "SpringGreen";
    "MediumSpringGreen";
    "Olive";
  
    % 青色系(Cyan)
    "Cyan";
    "DarkCyan";
    "LightSeaGreen";
    "PaleTurquoise";
    "Teal";
    "LightCyan";
    "Azure";
    "HoneyDew";
  
    % 蓝色系(Blue)
    "Blue";
    "MediumBlue";
    "DarkBlue";
    "MidnightBlue";
    "DodgerBlue";
    "DeepSkyBlue";
    "SkyBlue";
    "LightSkyBlue";
    "LightBlue";
    "SteelBlue";
    "CornflowerBlue";
    "RoyalBlue";
    "AliceBlue";
    "GhostWhite";
    "FloralWhite";
    "MistyRose";
  
    % 紫色系(Purple)
    "Purple";
    "BlueViolet";
    "MediumSlateBlue";
    "MediumPurple";
    "MediumOrchid";
    "Indigo";
    "SlateBlue";
    "Pink";
  
    % 黑白灰色系(亮→暗)
    "White";
    "Snow";
    "Ivory";
    "Silver";
    "Gray";
    "Black"
};
%%

% 3. 色环核心参数设置(沿用你的原始参数)
N = length(clrrgb);          % 颜色总数
R_inner = 0.6;               % 内圆半径(色块内边界)
R_outer = 1.0;               % 外圆半径(色块外边界)
theta = linspace(0, 2*pi, N+1);  % 每个色块的角度范围(含首尾重合点)

% 4. 创建图形窗口并设置属性(沿用你的原始设置,新增回调函数容器)
figure('Position', [0, 0, 1000, 1000], ...
       'Name', 'HTML颜色色环图(带点击显示RGB)');  % 窗口名称
hold on; axis equal; axis off;             % 等比例坐标轴,隐藏坐标轴
colormap(parula);  % 临时 colormap,不影响色块颜色

% 用于存储点击提示文本的句柄(后续点击时更新,避免重复显示)
h_text_info = text(0, -1.3, '', ...
                   'HorizontalAlignment', 'center', ...
                   'FontSize', 10, ...
                   'FontWeight', 'bold', ...
                   'Color', 'red');

% 5. 循环绘制每个颜色的扇形色块(新增点击回调功能)
for i = 1:N
    % —— 步骤1:绘制扇形色块(新增Tag和ButtonDownFcn回调) ——
    theta1 = theta(i);
    theta2 = theta(i+1);
    [x, y] = pol2cart([theta1, theta2, theta2, theta1], [R_inner, R_inner, R_outer, R_outer]);
  
    % 绘制色块并添加点击回调:点击时触发显示当前色块的RGB值
    h_patch = patch(x, y, clrrgb{i}, ...
                    'EdgeColor', 'white', ...
                    'LineWidth', 0.5, ...
                    'Tag', ['color_', num2str(i)]);

    % —— 步骤2:计算标注位置与角度(完全保留你的原始逻辑) ——
    theta_mid = (theta1 + theta2) / 2;  % 色块中间角度(弧度)
    theta_deg = rad2deg(theta_mid);     % 转为角度(0~360°)
    R_text = R_outer + 0.05;            % 文本半径(略大于色块)
    [x_text, y_text] = pol2cart(theta_mid, R_text);  % 文本坐标
  
    % —— 关键优化:你的角度控制逻辑(完全保留) ——
    if theta_deg >= 90 && theta_deg < 180
        text_rotation = theta_deg + 180;
        h_align = 'right';
    elseif theta_deg >= 180 && theta_deg < 270
        text_rotation = theta_deg - 180;
        h_align = 'right';
    else
        text_rotation = theta_deg;
        h_align = 'left';
    end
  
    % —— 步骤3:绘制颜色名称标注(完全保留你的原始设置) ——
    text(x_text, y_text, clrname{i}, ...
         'HorizontalAlignment', h_align, ...
         'VerticalAlignment', 'middle', ...
         'Rotation', text_rotation, ...
         'FontSize', 9, ...
         'FontWeight', 'bold');
end

hold off;

saveas(gcf,'fcolor.jpg');
savefig(1,'fcolor.fig');

clrmap = [clrname clrrgb];
save('clrmap.mat',"clrmap");


以下是生成的色环图,这部分代码比较复杂,如果你想优化就自己进行了。

img

RGB颜色库查找函数(.m函数,名为 fcolor)

执行路径下必须有 fcolor.m函数文件和上述保存的 clrmap.mat

以下是函数 fcolor.m文件内容,注意,如果输入一个不存在的颜色名字,则会默认输出黑色([0 0 0])并给出Warning。

% 输入一个颜色名称(标准html颜色),返回对应的0~1 rgb值

function [rgb] = fcolor(name)
    load("clrmap.mat","clrmap");
    rows = size(clrmap,1);
    row_find = 0;
    for k = 1:rows
        if(strcmp(clrmap{k,1},name))
            row_find = k;
            break;
        else
            continue;
        end
    end
    if(row_find==0)
        warning('Color name does not exist! Black for default.');
        rgb = [0,0,0];   
    else
        rgb = clrmap{row_find,2};
    end
end

调用 fcolor函数,即可返回对应的颜色RGB值。

举一个 plot中使用的例子:

 plot(0:0.1:1,0:0.1:1,'-^',...
    'Color',fcolor("Crimson"),...
    'MarkerFaceColor',fcolor('Olive'),...
    'MarkerEdgeColor',fcolor('Indigo')...
    );

画出来的图长这样:

img

posted @ 2025-10-16 17:59  白发戴花君莫笑  阅读(13)  评论(0)    收藏  举报