时间:2011-07-21 11:50:14

标签: matlab colors plot points scatter

我为此点(矩阵Nx1)设置了 (矩阵Nx1)。我想绘制这些点(没有问题,我这样做:plot(points, groups, 'o');),但我想为每个组设置唯一的颜色。我怎样才能做到这一点?现在我只有两组(1,2)。

3 个答案:

答案 0 :(得分:3)

使用逻辑索引选择您想要的点

figure;
hold all; % keep old plots and cycle through colors

ind = (groups == 1); % select all points where groups is 1

% you can do all kind of logical selections here:
% ind = (groups < 5)

plot(points(ind), groups(ind), 'o');

答案 1 :(得分:2)

给出一些随机数据:

points = randn(100,1);
groups = randi([1 2],[100 1]);

以下是一些更一般的建议:

g = unique(groups);           %# unique group values 
clr = hsv(numel(g));          %# distinct colors from HSV colormap
h = zeros(numel(g),1);        %# store handles to lines
for i=1:numel(g)
    ind = (groups == g(i));   %# indices where group==k
    h(i,:) = line(points(ind), groups(ind), 'LineStyle','none', ...
        'Marker','.', 'MarkerSize',15, 'Color',clr(i,:));
end
legend(h, num2str(g,'%d'))
set(gca, 'YTick',g, 'YLim',[min(g)-0.5 max(g)+0.5], 'Box','on')
xlabel('Points') ylabel('Groups')

scatter_lines

如果您可以访问统计工具箱,则可以在一次调用中简化上述所有操作:

gscatter(points, groups, groups)

最后,在这种情况下,更适合显示Box plot

labels = num2str(unique(groups),'Group %d');
boxplot(points,groups, 'Labels',labels)
ylabel('Points'), title('Distribution of points across groups')

boxplot

答案 2 :(得分:0)

假设组的数量是先验的:

plot(points(find(groups == 1)), groups(find(groups == 1)), points(find(groups == 2)), groups(find(groups == 2)));

find将为您提供条件成立的groups的所有索引。您使用find的输出作为pointsgroups的每个可能值的groupsplot的子向量。

当您使用hold on plot(points(find(groups == 1)), groups(find(groups == 1)), 'r') plot(points(find(groups == 2)), groups(find(groups == 2)), 'y') 绘制多个x-y组合时,它会为每个组合使用不同的颜色。

或者,你可以明确地选择每种颜色:

plot

最后,有一种方法可以让情节自动循环显示颜色,这样你就可以在不指定颜色的情况下调用{{1}},但方法可以解决这个问题。