MATLAB从循环中绘制x,y

时间:2010-07-10 15:16:26

标签: matlab plot

我想知道为什么这两个代码不会产生相同的情节?

代码1:

x=[2,5,7];
y=[10,4,3];
plot(x,y);

代码2:

x=[2,5,7];
y=[10,4,3];

for i=1:length(x)
    xx=x(i);
    yy=y(i);
    plot(xx,yy);

end

EDITED: 如何使Code 2的输出与Code 1

中的输出相似

2 个答案:

答案 0 :(得分:4)

代码1

您正在使用x命令在向量中定义的yplot(x,y)坐标绘制。默认情况下,它表示plot(x,y,'-');,表示您绘制一条线(-)。

代码2

您正在绘制向量中存储的单个点(无线),因为您为每个点(plotxx)调用了yy

您可以复制代码1中代码2中的效果,并进行以下更改:

plot(x,y,'.');

这迫使MATLAB仅绘制而不是连接线

如果您想要点

plot(x,y,'-.');

有关更多详细信息,请查看plot命令的文档。

示例代码:

%# If you know the number of elements, preallocate
%# else just initialize xx = []; and yy =[];
xx = zeros(100,1);
yy = zeros(100,1);

%# Get the data
for i = 1:length(xx)
    xx(i) = getXSomehow();
    yy(i) = getYSomehow();
end

%# Plot the data
plot(xx,yy);

答案 1 :(得分:3)

Jacob's answer解决了为什么这两段代码会给出不同的结果。在回答您关于在绘图时需要在循环中阅读xy的评论时,这里有一个解决方案,可让您使用GET更新每个读取的值的绘图线SET命令:

hLine = plot(nan,nan,'-.');  %# Initialize a plot line (points aren't displayed
                             %#   initially because they are NaN)
for i = 1:10                       %# Loop 10 times
  x = ...;                         %# Get your new x value somehow
  y = ...;                         %# Get your new y value somehow
  x = [get(hLine,'XData') x];      %# Append new x to existing x data of plot
  y = [get(hLine,'YData') y];      %# Append new y to existing y data of plot
  set(hLine,'XData',x,'YData',y);  %# Update the plot line
  drawnow;                         %# Force the plot to refresh
end

如果您不打算循环特定次数,但只想在某些条件为真时循环,则可以使用WHILE循环而不是FOR循环。