我有一个三维点数组。 我需要在2D [x,z]网格上绘制它们,其中每一行都基于范围内的Y值。 ES。第一行由点0和0表示。 y< 1,第二个用1< y< 2等。
我可以使用这个脚本很好地绘制点数(为了获得更好看的图形,我也可以通过在rgb三元组内移动来改变每组点的颜色)。 set是该行的范围(在我的情况下,Y是时间,我需要每0.1秒绘制一次)。我是我的积分数的索引。
w= 0;
yend = 100;
set = 0.1;
numberOfColors = 1/2*(Yinterval)*(1/set);
incrementOfColor = 1/numberOfColors;
red = 0;
green = 0;
blue = 1;
color=[red green blue];
while w < yend
while y(i)>w&&y(i)<w+set
figure(1)
hold on
plot(x(i),z(i),'.','Color',color);
hold on
i=i+1;
end
w=w+set;
if red < 1-incrementOfColor && blue > 0
red = red + incrementOfColor;
blue = blue - incrementOfColor;
end
if red > incrementOfColor && blue < incrementOfColor
red = red-incrementOfColor;
green = green + incrementOfColor;
blue = 0;
end
color = [red green blue];
end
这就是结果: http://i.imgur.com/HTyzWai.png 当数据太多时,绘图变得很麻烦,而且数据隔离点太少并不能说明多少。 我试过在&#34; set&#34;中转换积分。间隔成阵列,但它确实没有成功:
while w < yend
while y(i)>w&&y(i)<w+set
vX(a,:)=x(i);
vZ(a,:)=z(i);
i=i+1;
a=a+1;
end
figure(2)
hold on
plot(vX,vZ,'-','Color',color);
给出了这个结果:imgur.com/S7OasUn.jpg
我的转换是错误还是数组不是处理此问题的正确方法?如果是这样,我应该使用什么?
我对matlab很新,所以如果这很明显,或者我错误地问了一些问题,请原谅。
编辑:
这是我想要达到的结果:
imgur.com/jPZTO8E.png
它是使用Origin的轮廓曲线工具获得的。
我猜你的意思是功能性的例子:
myPoints[i]:
i=0, x = 1, y= 0.03, z = 1
i=1, x = 2, y= 0.06, z = 3
i=2, x = 2.5, y = 0.09, z = 4
i=3, x = 1.2, y = 1.01, z = 3.1
i=4, x = 1.3, y = 1.04, z = 1.1
i=5, x = 1.2, y = 1.06, z = 2.5
i=6, x = 2, y = 1.09, z = 3.1
i=7, x = 1.2, y = 2.02, z = 3.1
等。
我希望点i 0,1,2绘制为一条线,i 3,4,5作为另一条线,i 7等绘制为第三条线。在我的数据中,我有很多要点。
这是我使用的数据的一个例子。 https://drive.google.com/file/d/0B9GHAkIYepQcRXdBdy03dFJtT1k/view?usp=sharing 其中:
x = myPoints(:,1);
y = myPoints(:,2);
z = myPoints(:,3);
在这个特定的情况下,我只关心y值在85.85和90.85之间的点,我想&#34;放置边缘&#34; (?)每0.1
x = myPoints(:,1);
y = myPoints(:,2);
z = myPoints(:,3);
ymin = 85.85;
ymax = 90.85;
set = 0.1;
nbins = (ymax-ymin)/set;
binedge = linspace(ymin, ymax, (nbins + 1));