在 MATLAB 中绘制许多未连接的线

Plotting many unconnected lines in MATLAB

我需要在 MATLAB 中绘制很多未连接的线。此代码将使用 for 循环执行此操作:

x = 1:5;
y = 10:-2:2;
figure;
hold on;
for ii = 1:5
    plot([0,x(ii)],[0,y(ii)],'b-');
end

是否可以在不使用 for 循环的情况下做同样的事情?

用例:我正在尝试可视化一棵树并且有很多线要绘制。我想预先计算所有行的终点并调用 plot 或等效一次。这就是我用 scatter 显示树节点的方法。

您可以使用 NaN to disconnect lines when plotting. Therefore, you can concatenate your x and y values with an NaN-vector of the same length and then reshape 它来 NaN 断开各个段之间的线。

为了使代码具有普适性,引入xoyo作为原点坐标。现在,要绘制的点可以计算如下:

xp = reshape([ones(size(x))*xo;x;NaN(size(x))],1,[]);
yp = reshape([ones(size(y))*yo;y;NaN(size(y))],1,[]);

xp-向量现在看起来像这样:

0   1   NaN    0   2   NaN    0   3   NaN    0   4   NaN    0   5   NaN
└ origin           └ end point of segment 2           └ to disconnect lines

产生与您的问题相同结果的完整代码如下:

x = 1:5;
y = 10:-2:2;

figure;
xo = 0;     % x-coordinate of origin
yo = 0;     % y-coordinate of origin
xp = reshape([ones(size(x))*xo;x;NaN(size(x))],1,[]);
yp = reshape([ones(size(y))*yo;y;NaN(size(y))],1,[]);
plot(xp,yp,'b-');

另一个解决方案:

plot([zeros(1,length(x));x],[zeros(1,length(x));y],'r-')