我需要在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
显示树节点的方式。
我需要在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
在绘图时断开线条。因此,您可以将x
和y
的值与相同长度的NaN
-向量连接起来,然后使用reshape
将其重塑,以便在各个段之间具有一个NaN
来断开线条。xo
和yo
作为原点的坐标。现在,要绘制的点可以如下计算: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-');
plot([zeros(1,length(x));x],[zeros(1,length(x));y],'r-')