如何通过MATLAB给最小二乘线提供与散点图中相应数据集相同的颜色?

时间:2016-03-28 15:29:21

标签: matlab matlab-figure

我有3个不同的数据集,我从中制作散点图。我用不同颜色编码的不同数据集。

我的代码看起来像这样:

clear all;
close all;

% my colormap
colormap = [0, 0, 0
            0.5, 0.5, 0.5
            0,   0.5, 0.5];

% x values of 3 different datasets
xvalues = [10 20 30; 35 65 95; 22 42 82];

% y values of 3 different datasets
yvalues = [1 2 3; 6 12 24; 2 4 8];

figure;
axis([0 90  0 30]);

% loop for each dataset
for i = 1:3

    x = xvalues(i,:);    
    y = yvalues(i,:);
    scatter(x,y, 60, colormap(i,:));   hold on;    

end

现在,我想为每个数据集添加相应数据集颜色的最小二乘线。

我在代码末尾添加了:

% add least-squares lines to scatter plot
h = lsline;
set(h,'linewidth',2,'color',colormap(i,:));

这将添加最小方块线 - 所有这些线都具有相同的颜色。

如何为每个最小二乘线赋予散点图中各个数据集使用的颜色

1

1 个答案:

答案 0 :(得分:1)

如果您的轴上有多个绘图对象,

lsline将返回a vector of line objects。您需要单独设置颜色。

hlines = lsline;
for k = 1:numel(hlines)
    set(hlines(k), 'Color', colormap(k, :))
end

您正在这样做,您将所有最佳拟合线设置为colormap(3,:)指定的颜色。

enter image description here

如果使用标准绘图对象而不是scatter(由于使用的是常量颜色和大小,因此散布此处没有任何好处),lsline应自动匹配对象的颜色。由于每个数据点的颜色通常不同,不会scatter绘图执行此操作。

figure;
axis([0 90  0 30]);

% loop for each dataset
for k = 1:3
    x = xvalues(k,:);    
    y = yvalues(k,:);
    plot(x, y, 'o', 'Color', colormap(k,:));
    hold on;    
end

lsline;