在 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
断开各个段之间的线。
为了使代码具有普适性,引入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
└ 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-')
我需要在 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
断开各个段之间的线。
为了使代码具有普适性,引入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 └ 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-')