2015-06-17 35 views
-2

我有一堆角度数据,范围从0到180度,以及等量的距离范围从0到100米。寻找一种绘制半圆上的角度和距离的方法

我正在寻找一种方法来获得一个半圆形(如玫瑰图的上半部分),其中对于每个数据点,我可以有一个从中心出来的酒吧,相关的角度,酒吧长度对应于距离。

有没有办法做到这一点?

+0

为什么不会使用一个额外线的常规'rose'情节,如'ylim([0 2)'? – bla

+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]相同,只是略微整齐。所以它连接了xy坐标。

num2cell(x, 2)将N×M矩阵x转换成包含1×M个向量的N×1单元阵列。这允许每条线都拥有它自己的单元格。

通过移位然后连接单元格阵列,最终得到第一行的x坐标为xy{1},y坐标为xy{2}等等。

因此,争论的情节看,当你做的plot(xy{:})

plot(line1X, line1Y, line2X, line2Y, ...) 
+0

不,如果我想绘制两个不同的函数'x = linspace(0,2 * pi,100); plot(x,sin(x),x,cos(x))'将它放入单元格数组使matlab将'xy {:}'看成'plot([0; x(1)],[0; y(1)],[0; x(2)],[0; y(2)],...)' – user1543042