我有一些数据要在 MATLAB 中绘制。数据由我想要的点的 x 和 y 坐标组成。目前,我正在使用绘图功能来绘制这些点。
数据有很多坐标相同的点。现在,我想要的是具有相同坐标的点不会绘制为单个点,而是绘制为较粗的点。
例如,假设点是
1,1
2,1
2,1
3,2
2,1
2,1
1,1
然后,该图应该在 3,2 处有一个点,但在 1,1 处有一个较粗的点,甚至在 2,1 处有一个较粗的点
有人可以告诉我该怎么做吗?
我有一些数据要在 MATLAB 中绘制。数据由我想要的点的 x 和 y 坐标组成。目前,我正在使用绘图功能来绘制这些点。
数据有很多坐标相同的点。现在,我想要的是具有相同坐标的点不会绘制为单个点,而是绘制为较粗的点。
例如,假设点是
1,1
2,1
2,1
3,2
2,1
2,1
1,1
然后,该图应该在 3,2 处有一个点,但在 1,1 处有一个较粗的点,甚至在 2,1 处有一个较粗的点
有人可以告诉我该怎么做吗?
您可以使用一些创造力和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
为了避免循环,在前面的例子的基础上,试试这个:
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 的出现次数。
使用scatter
形式的命令:
scatter(X,Y,S)
您必须确定坐标重复多少次才能为 S 设置正确的向量。
描述:
scatter(X,Y,S) 使用单一颜色以指定大小 (S) 绘制标记。这种类型的图表也称为气泡图。
S 确定每个标记的面积(以点^2 指定)。S 可以是与 X 和 Y 长度相同的向量或标量。如果 S 是标量,MATLAB 将所有标记绘制为相同大小。如果 S 为空,则使用默认大小。
有关详细信息,请参阅文档。