绘制所有散点之间的线,并根据点之间的距离调整线的粗细

时间:2016-10-09 18:03:06

标签: matlab format matlab-figure scatter-plot

以下是我计划绘制的坐标,文件名是Coords:

x       y
0.0110  0.1105
-0.2730 0.2559
0.3610  0.1528
-0.0077 -0.2520
-0.2412 -0.1979
0.0444  -0.0526
0.0543  -0.0076
-0.1710 0.1170
0.12741 -0.0448
0.0949  -0.0811

这是我的代码首先绘制散点图:

Hold on
%Plot Coordinate
For i=1:10
    dot_size = 100;
    scatter ( Coords(i,1) ,Coords(i,2), dot_size, 'filled', 'MarkerEdgeColor', 'k' );
end

%Draw line distance between each points
for i=1:10
     for j=1:10
          plot( [Coords(i,1) Coords(i,2)], [Coords(j,1) Coords(j,2)] );
     end
end
Hold off

%Sets the size of the y and x axis
xlim( [ min( Coords(:,1)) max( Coords(:,1)) ] );
ylim( [ min( Coords(:,2)) max( Coords(:,2)) ] );
axis off;

以下是我得到的结果:

scatter figure

我不知道为什么到处画线。我还注意到即使在plot(x,y) = 0时,线仍在被绘制。

我还想根据两点之间的距离来改变线条的粗细和不透明度:例如。较粗和较暗的线,用于点之间的短距离。如果两点之间的距离很长,则更薄/更轻。

我希望我的情节看起来像这样:

Ideal result

2 个答案:

答案 0 :(得分:3)

你的线与散乱点不匹配的原因是你给plot的坐标;坐标的顺序错误,因此它们没有正确定义线条。

我修改了您的代码以更正此问题。我将plot替换为line,但您也可以使用plot替换f。此外,我定义了anonymous functions gd,以根据两端的距离n = 10; % number of points dot_size = 100; Coords = rand(n, 2); % maximum possible length in your coordination plane: L = norm([max(Coords(:,1))-min(Coords(:,1)),max(Coords(:,2))-min(Coords(:,2))]); % this function defines the line width: f = @(x) L / (x + 0.1); % 0.1 avoids huge line widths in very small distances % this function defines the color: g = @(x) x * [1 1 1] / L; figure hold on for ii = 1:n-1 for jj = ii+1:n d = norm([Coords(ii,1)-Coords(jj,1), Coords(ii,2)-Coords(jj,2)]); line([Coords(ii,1) Coords(jj,1)], [Coords(ii,2) Coords(jj,2)], ... 'LineWidth', f(d), 'Color', g(d)); end end scatter (Coords(:,1), Coords(:,2), dot_size, 'filled', 'MarkerEdgeColor', 'k'); axis tight axis off 定义每条线的颜色和粗细。您可以修改这些功能以获得不同的图形行为。

axis tight

使用此输出:

enter image description here

备注:

  1. xlim( [ min( Coords(:,1)) max( Coords(:,1)) ] );是一个将限制设置为尽可能最小的命令。它相当于您的for和下一行。
  2. scatter - 循环中,您应该尽量避免选择一对两点或同一点作为一条线的两侧。
  3. 对于散射,您不需要循环。一切都可以完成。
  4. 我在绘制线条后带了.chart-symbol { -fx-padding: 10px; } ,所以圆圈被绘制在顶部。

答案 1 :(得分:2)

还有一个专门的MATLAB函数用于生成如下图:gplot

  data = [
    0.0110  0.1105
    -0.2730 0.2559
    0.3610  0.1528
    -0.0077 -0.2520
    -0.2412 -0.1979
    0.0444  -0.0526
    0.0543  -0.0076
    -0.1710 0.1170
    0.12741 -0.0448
    0.0949  -0.0811]; % Coordinates

    adjM = squareform(pdist(data)); % 
    adjM (adjM > 0) = 1; % Form adjacency matrix based on Euclidean distances


figure; gplot(adjM, data, '-o') % Plot figure based on coordinates and adjacency matrix

enter image description here

然后,根据自己的喜好进行自定义,例如:如果要更改标记类型,请删除轴,添加标记等。