如何在matlab中的散点图上显示颜色渐变?

时间:2012-07-08 16:20:52

标签: matlab visualization matlab-figure scatter

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

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

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

我怎么能这样做?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

方法1:

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

% 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)

方法2:

如果您拥有统计和机器学习工具箱,您也可以使用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 demo

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