在MATLAB中绘制许多不相连的线

4

我需要在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显示树节点的方式。

2个回答

3
您可以使用NaN在绘图时断开线条。因此,您可以将xy的值与相同长度的NaN-向量连接起来,然后使用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
└ 起点           └ 线段2的终点           └ 断开线条

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

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-');

2
另一种解决方案:
plot([zeros(1,length(x));x],[zeros(1,length(x));y],'r-')

非常优雅的解决方案,具有内置功能。 - TyanTowers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接