我想在MATLAB中绘制一些数据。数据由我想要的点的x和y坐标组成。目前,我正在使用绘图功能绘制这些点。
数据有很多具有相同坐标的点。现在,我想要的是具有相同坐标的点不会绘制为单个点,而是绘制更粗的点。
例如,假设点是
1,1
2,1
2,1
3,2
2,1
2,1
1,1
然后,该图应该在3,2处有一个点,但在1,1处有一个较粗的点,在2,1
处有一个较粗的点有人可以告诉我该怎么做吗?
答案 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。