Matlab:用相同的坐标绘制多个点

时间:2011-12-07 01:30:07

标签: matlab plot matlab-figure

我想在MATLAB中绘制一些数据。数据由我想要的点的x和y坐标组成。目前,我正在使用绘图功能绘制这些点。

数据有很多具有相同坐标的点。现在,我想要的是具有相同坐标的点不会绘制为单个点,而是绘制更粗的点。

例如,假设点是

1,1

2,1

2,1

3,2

2,1

2,1

1,1

然后,该图应该在3,2处有一个点,但在1,1处有一个较粗的点,在2,1

处有一个较粗的点

有人可以告诉我该怎么做吗?

3 个答案:

答案 0 :(得分:3)

你可以使用一些创造力和scatter功能来做到这一点。

首先,您需要将数据减少到一个点列表,再加上每个位置的点数计数。

例如,如果您有一些数据:

xy = [...
    1,1; ...
    2,1; ...
    2,1; ...
    3,2; ...
    2,1; ...
    2,1; ...
    1,1];

获取独特的点和独特的索引:

[xyUnique, ignore, ixs] = unique(xy,'rows')

这非常痛苦,但我们可以使用ixs向量计算每个唯一行的出现次数(可能有更好的方法)。

counts = zeros(size(xyUnique,1),1);
for ix = 1:size(counts,1);
    counts(ix) = sum(ixs == ix);
end

现在使用分散来制作你想要的情节

scatter(...
    xyUnique(:,1), ...  %X values
    xyUnique(:,2), ...  %Y values
    counts*20, ...      %Individual marker sizes, note scale factor to make this visible
    'b', ...            %Marker colors
    'filled');          %I think these look better filled 

答案 1 :(得分:1)

为了避免循环,在上一个示例的基础上,请尝试以下方法:

xy = [...
    1,1; ...
    2,1; ...
    2,1; ...
    3,2; ...
    2,1; ...
    2,1; ...
    1,1];

[xyUnique, ignore, ixs] = unique(xy,'rows')

将导致

xyUnique =
     1     1
     2     1
     3     2

接下来,我们使用函数 hist

[nRows, nCols] = size(xyUnique)
xyCount = hist(ixs,nRows)

结果是

xyCount =
     2     4     1

xyCount的每个值都是xyUnique的每一行的出现次数。

答案 2 :(得分:0)

使用表单的scatter命令:

scatter(X,Y,S)

您必须确定重复坐标的次数,以便为S设置正确的矢量。

  

说明

     

散射(X,Y,S)使用单一颜色绘制指定大小(S)的标记。这种类型的图形也称为气泡图。

     

S确定每个标记的面积(在点^ 2中指定)。 S可以是与X和Y或标量相同长度的向量。如果S是标量,MATLAB将绘制所有相同大小的标记。如果S为空,则使用默认大小。

有关详细信息,请参阅documentation