作业帮 > 综合 > 作业

Matlab使用GUI分别选择生成不同的图像

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/06/01 02:40:47
Matlab使用GUI分别选择生成不同的图像
现执行一个文件读取了原始数据,单独执行后会生成一个矩阵,然后可以让矩阵的每一列形成一条图像,矩阵共50列,因为是执行之前的操作判断,故矩阵的行数不确定,之前的矩阵式69*50的.现在50列分别生成50个图像,执行程序后会自动生成这50个图像.现在需要用Gui进行选择,可以单独选择出这50组数据每一组出现在axes图像上呈现应该怎么做呢?希望是有50个选择button,选择到哪个执行之后就会出现相应编号的图线,已经编好的代码和原始数据在以下链接中,希望各位大侠帮忙!感激不尽!http://pan.baidu.com/s/1o6DIjfO
帮你简单做了个界面,先用用看(可直接下载附件),如果还有别的要求再说吧.
function zd
% 数据文件
file = '20131027-2LOOP.usf';
fid = fopen(file, 'rt');
if fid == -1
    error(['Error open file: ' file])
end
 
% 表头标识
tag = '/CURRENT:';
n = length(tag);
current = [];
data = {};
M = [];
 
% 每次读一行,若发现表头标识,则保存数据
while ~feof(fid)
    s = fgetl(fid);
    if strncmpi(s, tag, n)
        current(end+1) = str2num( s(n+1:end) );
        if ~isempty(M), data{end+1} = M(:,end); end
        M = [];
    else
        try
            d = str2num(s);
            M(end+1, :) = d;
        end
    end
end
if ~isempty(M), data{end+1} = M(:,end); end
 
% 现在是把每组数据分开存放的,如果希望合并,加上后面这句 M1 = cat(1,data{:});
fig = figure('Name','从列表框选择数据绘图(可多选)','Number','off');
h.list = uicontrol('style','list','units','normal','pos',[0.05 0.05 0.9 0.9],...
    'str',arrayfun(@(i){sprintf('第%i组数据',i)},1:length(data)),...
    'call',@local_plot,'back','w','Fontsize',10,'max',2,'min',0);
h.data = data;
set(fig,'User',h);
 
function local_plot(varargin)
h = get(gcbf,'User');
data = h.data;
list = h.list;
val = get(list,'Val');
for ii = 1:length(val)
    C = data{val(ii)}; % 取出一列
    C = C(C >= 0); % 剔除小于0的量
    D = zeros(length(C)-2, 1);  % D储存平均后的新列
    for jj = 3:length(C)
        D(jj-2) =(C(jj-2)+2*C(jj-1)+C(jj))/4;
    end
    % 绘制D
    figure(val(ii)+100);
    set(gcf,'Name',sprintf('第%i组数据',val(ii)),'Number','off')
    plot(D);
    grid on;
end
再问: Error in ==> zd367730215109188244 at 43 h.list = uicontrol('style','list','units','normal' 这一行报错了呀,我也看不太懂这行代码,是哪里错了呀?是不是我的版本太低了呀?
再答: 1、请把报错信息贴完整,你现在贴出来的这些根本无法判断; 2、请告知你的MATLAB版本。
再问: 错误就在百度网盘那个文件的第43行,一共三行那个,定义用户自选的语句
再问: 是7.01的~
再答: 我看到了在那一行,但问题是这行根本就没错。既然报错,不会只有这么一点信息,我是让你贴出完整的信息。
再问: 哦哦哦,可是报错上面第一行就指明了错误在文件的第43行,下面就是error in 那个语句...太长了回复里不让粘贴了。也可能是我没看清楚呢,我再仔细看看
再答: 不要后面的那一大串,要前面的那一行,类似下面这样(我故意把程序改错出来的错误): ??? Undefined function or method 'arayfun' for input arguments of type 'function_handle'.Error in ==> zd367730215109188244 at 43
h.list = uicontrol('style','list','units','normal','pos',[0.05 0.05 0.9 0.9],...

再问: 嗯嗯好的!我截图下来到网盘~~
再答: 没必要截图,就把 Error in ==>前面的内容(类似上面标红的那句)贴出来就可以了
再问: 好的~找到啦!之前没有留意!是这个错误! ??? Undefined command/function 'arrayfun'.
再答: 是因为你的版本太低的原因。查了一下,arrayfun函数是7.1版(R14SP3)引入的,而你的版本是7.0.1(R14SP1)。 在你现在的版本上可以把'str',arrayfun(@(i){sprintf('第%i组数据',i)},1:length(data)),...换成'str',['第1组数据' sprintf('|第%i组数据',2:length(data))],...这个肯定没问题,在6.5版上都可以用。
再问: 前辈!我又有问题了,看看我的新的提问吧!谢谢前辈!
再答: 你不贴出链接,我无法知道你的提问在哪里。
再问: 好滴!我再仔细这一下提问然后粘出来,有点着急了要答辩😭😭有就把问题都说了呀!麻烦您了!谢谢了!
再问: http://zhidao.baidu.com/question/431543936357014204.html
再问: 😔😔😔就是在这个提问里😭😭
再答: 我看了一下你的提问,感觉很多问题说的不清楚。 建议你最好静下心来好好整理一下,梳理清楚哪些是已有的,哪些是你需要的,把问题的界限划分清楚。毕竟我没有那么多时间一点点去揣摩你到底想要什么,大家都很忙的不是?而且,提问者尽量把问题写清楚,也是对回答者的起码尊重。
再问: 打扰了,又来麻烦您!前一段又被要求用c来做程序,做完了之后发现作图实在是困难,就想用matlab来作图,还是有不会的,问题在这里,我的积分也快没了,就剩下50个了,都给您了: http://zhidao.baidu.com/question/751999231372683444.html谢谢前辈~