我为此点(矩阵Nx1)设置了点 (矩阵Nx1)和组。我想绘制这些点(没有问题,我这样做:plot(points, groups, 'o');
),但我想为每个组设置唯一的颜色。我怎样才能做到这一点?现在我只有两组(1,2)。
答案 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')
如果您可以访问统计工具箱,则可以在一次调用中简化上述所有操作:
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')
答案 2 :(得分:0)
假设组的数量是先验的:
plot(points(find(groups == 1)), groups(find(groups == 1)), points(find(groups == 2)), groups(find(groups == 2)));
find
将为您提供条件成立的groups
的所有索引。您使用find
的输出作为points
和groups
的每个可能值的groups
和plot
的子向量。
当您使用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}},但方法可以解决这个问题。