【问题标题】:Matlab: Plotting multiple points with same coordinatesMatlab:绘制具有相同坐标的多个点
【发布时间】:2012-01-14 14:40:11
【问题描述】:

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

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

例如,假设点是

1,1

2,1

2,1

3,2

2,1

2,1

1,1

那么,绘图应该在 3,2 处有一个点,但在 1,1 处有一个更粗的点,甚至在 2,1 处有一个更粗的点

谁能告诉我怎么做?

【问题讨论】:

  • 不知道任何 MATLAB 这样做的方式,但我曾经在自己的例程中通过绘制一个小圆圈来做这些事情(圆圈就足够了,尽管那个标记可以是任何东西)和每次击中同一个点时,只需将半径增加一。最后你会得到一个大的实心圆圈,具体取决于你“击中”同一个地方的次数。

标签: matlab plot matlab-figure


【解决方案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】:

    您可以使用一点创意和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 
    

    【讨论】:

      【解决方案3】:

      使用scatter 形式的命令:

      scatter(X,Y,S)
      

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

      说明:

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

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

      欲了解更多信息,请参阅documentation

      【讨论】:

        猜你喜欢
        • 2015-03-17
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 2021-09-04
        • 1970-01-01
        • 2014-11-14
        • 2012-05-09
        相关资源
        最近更新 更多