我有一堆0到180度的角度数据,以及0到100米的等距离。
我正在寻找一种获得半圆形的方法(如玫瑰图的上半部分),对于每个数据点,我可以从中心出来一个条形,相关角度,条形长度对应距离。
有办法做到这一点吗?
答案 0 :(得分:2)
我认为这可能会做你想要的。只需转换为笛卡儿并分离成单元格数组。
%Generate sample data
theta = pi*rand(10, 1); r = 15*rand(size(theta));
%Make (x,y) coordinates
x0 = r.*cos(theta);
y0 = r.*sin(theta);
%Convert to cell arrays, this is assuming a column vector, if it were a 1 x N row vector change the `2` to a `1` and `vertcat` to `horzcat`.
xy = vertcat(num2cell([zeros(size(x0)), x0], 2)', num2cell([zeros(size(y0)), y0], 2)');
%Make the plot
plot(xy{:})
编辑: 解释
xy = vertcat(num2cell([zeros(size(x0)), x0], 2)', num2cell([zeros(size(y0)), y0], 2)');
更好。
vertcat(A,B)
与[A; B]
相同,只是有点整洁。所以它连接x
和y
坐标。
num2cell(x, 2)
将N×M矩阵x
转换为包含1×M个向量的N×1个单元阵列。这允许每一行拥有它自己的单元格。
通过转置然后连接单元格数组,最终得到xy{1}
中第一行的x坐标和xy{2}
中的y坐标,依此类推。
因此当您执行plot(xy{:})
时,参数图看到的是
plot(line1X, line1Y, line2X, line2Y, ...)