我有一个散点图,它将覆盖几组数据。每组数据当前显示为默认颜色图中的下一种颜色。这是我现在的代码:
figure
hold on
for i=1:10
scatter(RunRawArea(i,:), RunRawNetLength(i,:));
end
hold off
我想要的是对每组数据(由 i 索引)进行颜色编码,使其成为渐变上的下一个颜色。例如,i=1 的数据为蓝色,i=5 为紫色,i=10 为红色。
我怎么能这样做?
我有一个散点图,它将覆盖几组数据。每组数据当前显示为默认颜色图中的下一种颜色。这是我现在的代码:
figure
hold on
for i=1:10
scatter(RunRawArea(i,:), RunRawNetLength(i,:));
end
hold off
我想要的是对每组数据(由 i 索引)进行颜色编码,使其成为渐变上的下一个颜色。例如,i=1 的数据为蓝色,i=5 为紫色,i=10 为红色。
我怎么能这样做?
您应该添加另一个参数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
方法一:
您可以对数据进行矢量化,因此您不需要循环,而是按系列添加颜色:
% 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
填充数据点并默认添加图例):
请注意,我使用了lines
只有 7 个条目的颜色图,所以在这个有 10 个系列的示例中,它会重复自己。