Matlab使用GUI分别选择生成不同的图像现执行一个文件读取了原始数据,单独执行后会生成一个矩阵,然后可以让矩阵的每一列形成一条图像,矩阵共50列,因为是执行之前的操作判断,故矩阵的行数
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/01 16:28:01
Matlab使用GUI分别选择生成不同的图像现执行一个文件读取了原始数据,单独执行后会生成一个矩阵,然后可以让矩阵的每一列形成一条图像,矩阵共50列,因为是执行之前的操作判断,故矩阵的行数
Matlab使用GUI分别选择生成不同的图像
现执行一个文件读取了原始数据,单独执行后会生成一个矩阵,然后可以让矩阵的每一列形成一条图像,矩阵共50列,因为是执行之前的操作判断,故矩阵的行数不确定,之前的矩阵式69*50的.现在50列分别生成50个图像,执行程序后会自动生成这50个图像.现在需要用Gui进行选择,可以单独选择出这50组数据每一组出现在axes图像上呈现应该怎么做呢?希望是有50个选择button,选择到哪个执行之后就会出现相应编号的图线,已经编好的代码和原始数据在以下链接中,希望各位大侠帮忙!感激不尽!http://pan.baidu.com/s/1o6DIjfO
Matlab使用GUI分别选择生成不同的图像现执行一个文件读取了原始数据,单独执行后会生成一个矩阵,然后可以让矩阵的每一列形成一条图像,矩阵共50列,因为是执行之前的操作判断,故矩阵的行数
帮你简单做了个界面,先用用看(可直接下载附件),如果还有别的要求再说吧.
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