for循环在matlab中不起作用

Posted

技术标签:

【中文标题】for循环在matlab中不起作用【英文标题】:for loop does not work in matlab 【发布时间】:2012-07-12 12:11:23 【问题描述】:

我正在尝试在同一张图上绘制两个数据集。两个数据都是同一天的,两种情况下的 x 轴都是包含日期和时间的时间馈送(格式为 dd:mm:yyyy hh:mm:ss)。然而,在这两种情况下,观察的数量可能不同,观察值的时间也可能不同。当我分别为文件夹中的每个 excel 文件进行绘图时,代码工作正常。但是我必须为整个月的每一天绘制相同类型的图(每个图将基于一个文件中的数据)。所以,我把代码放在一个for循环中。但令我大吃一惊的是,addaxis 将不再起作用。我得到的错误是:

Error in ==> addaxis at 108
hplt = plot(varargin:);

Error in ==> crossplot at 17
addaxis(putdata.datenos,calldata.ltp,'r-');

其中 crossplot 是我的脚本文件的名称。 addaxis 是我从文件交换中下载并安装的一个功能。它基本上提供了一种在同一图表中绘制两个或多个不同轴的便捷方式。

现在我知道每种情况下数据点的数量都不同。但是当我为工作区中的每个文件单独运行代码时,代码仍然可以正常工作。当我将它放入 for 循环时,它只会给出错误。你能帮我解决这个问题吗?我完全被发生了什么弄糊涂了?我使用的代码如下:

cd('H:/heckyl intern/no analysis/pivots/ce 5200 28 jun');

callnames=dir('*.xlsx');

cd('H:/heckyl intern/no analysis/pivots/pe 5200 28 jun');

putnames=dir('*.xlsx');

for i=1:length(callnames)
    calldata=csv2struct(['H:/heckyl intern/no analysis/pivots/ce 5200 28 jun/' 
                        callnames(i).name]);
    putdata=csv2struct(['H:/heckyl intern/no analysis/pivots/pe 5200 28 jun/' 
                        putnames(i).name]);
    [tempname remain]=strtok(callnames(i).name,'.');
    figname=[tempname '.fig'];
    calldata.datenos=datenum(calldata.xchangefeedtime);
    putdata.datenos=datenum(putdata.xchangefeedtime);
    plot(calldata.datenos,calldata.ltp);
    addaxis(putdata.datenos,calldata.ltp,'r-');
    saveas(gcf,figname);
    close(gcf);
end

PS:很抱歉询问了很长时间。但我是 matlab 的新用户,不知道整个 Matlab 行话。这是我在这个板上的第一个问题。无论如何,提前感谢您帮助我。

【问题讨论】:

由于您是新手,您可以尝试使用 matlab 中的帮助文件,方法是键入:doc for help for 另外,尝试缩进代码以获得更好的可读性。 您可以尝试在调试模式下逐步运行您的代码来观察您的变量。或者,您可以添加一些 disp 语句来弄清楚发生了什么。 您应该检查变量callnamesputnames中的文件名数量及其顺序是否相同。 【参考方案1】:

我不知道 addaxis,我的 Matlab 没有。它是文件交换之外的那个吗?你可以只使用绘图并保持,你不需要 addaxis 的声音。试试这个:

    for i=1:length(callnames)
        calldata=csv2struct(['H:/heckyl intern/no analysis/pivots/ce 5200 28 jun/' 
                            callnames(i).name]);
        putdata=csv2struct(['H:/heckyl intern/no analysis/pivots/pe 5200 28 jun/' 
                            putnames(i).name]);
        [tempname remain]=strtok(callnames(i).name,'.');
        calldata.datenos=datenum(calldata.xchangefeedtime);
        putdata.datenos=datenum(putdata.xchangefeedtime);
        plot(calldata.datenos,calldata.ltp);
        hold on;
        plot(putdata.datenos,calldata.ltp,'r-')
        figname=[tempname '.fig'];
        saveas(gcf,figname);
        close(gcf);

    end

【讨论】:

以上是关于for循环在matlab中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

简单的for循环在python中不起作用

条件For循环在批处理文件中不起作用

jQuery if 语句在 for 循环中不起作用

Liquid - if contains 语句在 for 循环中不起作用

for循环后的最后一个过程语句在pl sql中不起作用

为啥正常的 for 循环允许为结构字段分配值,而 for range 在 Golang 中不起作用? [复制]