HOWTO · MATLAB

MATLAB RGB 三元组

学习如何使用 RGB 三元组为 MATLAB 图中的线条、散点和单个柱形设置颜色。

本页内容

要在 MATLAB 中设置自定义绘图颜色,请使用 RGB 三元组:一个按红、绿、蓝顺序排列的三元向量,每个分量的取值范围为 0 到 1。将线条的 Color 属性设置为一个三元组,或提供一个 N×3 矩阵,逐个为 N 个散点或柱形着色。

理解 MATLAB 中的 RGB 三元组

RGB 三元组按顺序存储红色、绿色和蓝色的强度。例如,[1 0 0] 是红色,[0 1 0] 是绿色,[0 0 1] 是蓝色。混合各分量可以得到其他颜色:[0.5 0.5 0] 将红色和绿色组合成柔和的黄色。分量为 0 表示该颜色不作任何贡献;为 1 表示贡献其全部强度。

当整个图形对象应共用一种颜色时,使用一个三元组。若要为每个点或每个柱形指定颜色,请在 N×3 矩阵中每行放置一个三元组,其中 N 是所绘制项目的数量。

使用 RGB 三元组设置线条颜色

线条对象的 Color 属性接受一个 RGB 三元组。下面的完整示例绘制了一条正弦曲线,并将其线条设置为自定义的偏红色。

warning('off', 'Octave:gnuplot-graphics');
set(0, 'defaultfigurevisible', 'off');
x = 0:0.1:10;
y = sin(x);
plot(x, y, 'Color', [0.8 0.2 0.2], 'LineWidth', 2);
title('Sine Wave with Custom Color');
xlabel('X-axis');
ylabel('Y-axis');
grid on;

更改这三个值可调整红、绿、蓝的强度。每个值都应保持在 0 到 1 的范围内;同一个三元组适用于整条线。

为散点图中的点指定 RGB 颜色

若要为各个点指定颜色,请向 scatter 传递一个 N×3 颜色矩阵。每一行对应于 x 和 y 向量中相同位置的点。下面的完整示例使用四个点,并为每个点赋予不同的颜色。

warning('off', 'Octave:gnuplot-graphics');
set(0, 'defaultfigurevisible', 'off');
x = [1 2 3 4];
y = [2 4 3 5];
colors = [1 0 0; 0 1 0; 0 0 1; 0.8 0.4 0];
scatter(x, y, 80, colors, 'filled');
xlabel('X');
ylabel('Y');
title('Scatter Points with RGB Colors');
grid on;

矩阵必须为每个点提供一行,其三列分别存放红、绿、蓝的值。如果只传递一个三元组,各点将共用该颜色。

使用 RGB 三元组设置单个柱形的颜色

在 MATLAB 中,将柱形对象的 FaceColor 属性设置为 'flat',并将一个 N×3 矩阵赋给它的 CData;每一行提供一个柱形的颜色。例如,在创建 bars = bar(values) 之后,使用 bars.FaceColor = 'flat'; bars.CData = colors;。此 Bar 对象接口是 MATLAB 专有的。下面的可运行 Octave 示例将每个柱形绘制为一个面片(patch),使每个矩形都能获得其对应的 RGB 三元组。

warning('off', 'Octave:gnuplot-graphics');
set(0, 'defaultfigurevisible', 'off');
values = [3 5 2 8];
colors = [0.2 0.6 0.8; 0.8 0.2 0.2; 0.2 0.8 0.2; 0.5 0.5 0.2];
hold on;
for k = 1:numel(values)
  x = k;
  patch([x-0.4 x+0.4 x+0.4 x-0.4], [0 0 values(k) values(k)], colors(k,:));
end
set(gca, 'XTick', 1:numel(values), 'XTickLabel', {'A', 'B', 'C', 'D'});
xlim([0.5 numel(values)+0.5]);
xlabel('Category');
ylabel('Value');
title('Bars with Individual RGB Colors');
grid on;

对于单个 MATLAB 柱形系列,CData 的各行按顺序对应各柱形。如果所有柱形应保持一致,请直接将 FaceColor 设置为单个 RGB 三元组,而不是使用平面面着色和颜色矩阵。Octave 的 bar 句柄不提供 MATLAB 的 Bar.CData 属性,因此在那里指定不同的面颜色时请使用面片对象。