3

我有一个散点图,它将覆盖几组数据。每组数据当前显示为默认颜色图中的下一种颜色。这是我现在的代码:

figure
hold on
for i=1:10
   scatter(RunRawArea(i,:), RunRawNetLength(i,:));
end
hold off

我想要的是对每组数据(由 i 索引)进行颜色编码,使其成为渐变上的下一个颜色。例如,i=1 的数据为蓝色,i=5 为紫色,i=10 为红色。

我怎么能这样做?

4

2 回答 2

1

您应该添加另一个参数scatter- 称为CData

https://www.mathworks.com/help/matlab/ref/scatter.html

说明: scatter(x,y) 在向量 x 和 y 指定的位置创建一个带有圆圈的散点图。这种类型的图表也称为气泡图。

在您的示例中:

figure
hold on
colorVec = linspace(1,0, size(RunRawNetLength,1));
colorVec = transpose(colorVec);
colorVec = repmat(colorVec,[1 3]);
for i=1:10
   scatter(RunRawArea(i,:), RunRawNetLength(i,:),'CData', colorVec );
end
hold off
于 2012-07-08T16:22:57.337 回答
0

方法一:

您可以对数据进行矢量化,因此您不需要循环,而是按系列添加颜色:

% specify your color map:
colorCode = lines(size(RunRawNetLength,1)); % or any other colormap...
% define the correct color for each series:
coloVev = repmat(colorCode,size(RunRawNetLength,1),1);
% plot it all at once without a loop:
scatter(RunRawArea(:),RunRawNetLength(:),[],coloVev)

方法二:

如果你有统计和机器学习工具箱,你也可以这样做gscatter

% define the series of data:
group = repmat(1:size(RunRawNetLength,1),1,size(RunRawNetLength,1));
% plot it all at once without a loop:
gscatter(RunRawArea(:),RunRawNetLength(:),group,colorCode);

如果您的颜色图没有足够的颜色用于所有系列,则函数循环并从第一个开始。

结果:

在这两种情况下,一些随机数据的结果将是(主要区别是gscatter填充数据点并默认添加图例):

gscatter 演示

请注意,我使用了lines只有 7 个条目的颜色图,所以在这个有 10 个系列的示例中,它会重复自己。

于 2017-01-07T21:13:46.120 回答