0

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

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

例如,假设点是

1,1

2,1

2,1

3,2

2,1

2,1

1,1

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

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

4

3 回答 3

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 来制作你想要的情节

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 
于 2011-12-07T05:22:38.800 回答
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 的出现次数。

于 2014-07-30T19:11:49.330 回答
0

使用scatter形式的命令:

scatter(X,Y,S)

您必须确定坐标重复多少次才能为 S 设置正确的向量。

描述:

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

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

有关详细信息,请参阅文档

于 2011-12-07T05:03:16.337 回答