matlab - 在 MATLAB 中使用 for 循环绘制图形

标签 matlab for-loop plot graph matlab-figure

我正在尝试使用 for 循环绘制一个简单的图形,如下所示

x=linspace(0,2*pi,100);
for i=1:numel(x)
    y=sin(x(i));
    plot(x(i),y)
    hold on
end

但是,我的图上什么也没有出现。这是为什么?

最佳答案

为什么会这样……

使用 plot(x(i),y),您将绘制 100 个单点(每次迭代一个点),默认情况下它们不会显示。因此情节看起来是空的。


方案一:向量化计算和直接绘图

我假设您打算画一条连续的线。在这种情况下,不需要 for 循环,因为您可以直接在 MATLAB 中计算和绘制向量。所以下面的代码可能会做你想要的:

x = linspace(0,2*pi,100);
y = sin(x);
plot(x,y);

请注意,yx 都是向量,y(n) 等于 sin(x(n )) 用于所有 n。如果您想自己绘制点,请使用 LineSpec -像这样调用plot时的语法1:

plot(x,y,'*');

1) 其他类型的点也是可能的,请参阅上面的链接文档。


解决方案 2:在 for 循环内计算值并随后绘制

如果您想在 for 循环内计算值并在之后绘制:预先分配所需的变量(在本例中为 y),在 for 循环内计算值,最后计算后用一个命令绘制它。

x = linspace(0,2*pi,100);

y = zeros(size(x));
for i = 1:numel(x)
    y(i) = sin(x(i));
end

plot(x,y);

解决方案 3:在计算时动态更新绘图

如果您坚持在每次迭代中绘图,可以按如下方式扩展解决方案 2 中的先前代码:创建一个图形,向其添加一个“空”绘图并存储其句柄。在 for 循环中计算值并将它们添加到 y 向量中,如上所示。作为最后一步,您可以通过更改其 XDataYData 属性并调用 drawnow 来更新绘图。请注意,每次在 for 循环中调用 plot 都会产生不必要的开销,我不推荐这样做。

% create figure and plot
figure;
ph = plot(0,0);
ax = gca;
set(ax,'XLim',[0,2*pi]);
set(ax,'YLim',[-1,1]);

% calculate and update plot
x = linspace(0,2*pi,100);
y = zeros(size(x));
for i = 1:numel(x)
    y(i) = sin(x(i));
    set(ph,'XData',x(1:i));
    set(ph,'YData',y(1:i));
    drawnow;
end

关于matlab - 在 MATLAB 中使用 for 循环绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37539883/

相关文章:

c++ - 基于范围的for循环将对象 move 到另一个容器中?

python - 如何更改 Seaborn FacetGrid 中子图标题和轴标签的位置?

python - 使用 y 选项时将图例添加到 pandas.dataframe.plot

python - 根据 num 条件返回 nums 列表

旋转闭合曲线的 MATLAB 曲面

javascript - 遍历数组中的项目以分配数据 ID,但仅获取数组中的最后一项

c++ - 在我的 Naughts and Crosses 游戏中没有人赢

python - 在 matplotlib 中绘制文本

matlab - MATLAB 中的常量

arrays - 如何切片结构数组?