(MATLAB) 我可以使用 copyfile 将导入的数据从 GUI 中的轴重新绘制到新图形吗?
(MATLAB) Can I re-plot imported data from axes in GUI to new figure using copyfile?
你好,我制作了一个带有按钮的 GUI select 一个包含文件的文件夹,然后将它们全部绘制在 GUI 中的单个轴上。
我还做了一个按钮,这样如果用户想在新图中打开这个图,他们就可以。但是,对于此按钮,他们必须再次 select 相同的文件夹(我所做的只是包括图形;轴;在相同的代码中)。但是有没有办法保存 selected 的数据,这样他们就不必再次选择文件夹了?我正在考虑使用复制文件功能,但我不知道该怎么做...
这是第一个按钮(导入数据)的代码:
d= uigetdir(pwd, 'Select a folder');
files = dir(fullfile(d, '*.txt'));
len = length(files);
linecolors = jet(len);
for i = 1:len
a = files(i).name;
filename{i} = a;
path = [d,'\',a];
data = dlmread(path);
plot(data(:,1), data(:,2),'color',linecolors(i,:),'linewidth',2);
hold on;
end
hold off;
xlabel('Intensity','fontweight','bold');
ylabel('Wave Number','fontweight','bold');
title('Spectra Plot','fontweight','bold','fontsize',14);
legend(filename,'Interpreter','none', 'location', 'southoutside');
这是第二个按钮(在新图中打开)的代码,只有 2 行(第 5 行和第 6 行):
d= uigetdir(pwd, 'Select a folder');
files = dir(fullfile(d, '*.txt'));
len = length(files);
linecolors = jet(len);
figure();
axes;
for i = 1:len
a = files(i).name;
filename{i} = a;
path = [d,'\',a];
data = dlmread(path);
plot(data(:,1), data(:,2),'color',linecolors(i,:),'linewidth',2);
hold on;
end
hold off;
xlabel('Intensity','fontweight','bold');
ylabel('Wave Number','fontweight','bold');
title('Spectra Plot','fontweight','bold','fontsize',14);
legend(filename,'Interpreter','none', 'location', 'southoutside');
有人可以帮忙吗?
谢谢
薇拉
您可以在 Matlab 中使用 savefig 命令保存图形,按下按钮即可加载该图形。
写入
savefig('figure1.fig')
在第一段代码的末尾。而只是
openfig('figure1.fig','new')
在第二位代码中。
编辑:现在我读了你对另一个答案的评论,有一种更快的方法来做你想做的事。第一个答案解释了如何从你的 gui 的不同部分保存和检索值,但你所需要的只是在一个新的图形中复制你的轴。
所以实现这一点的另一种方法是:
为按钮 1 保留完全相同的代码(我的代码甚至是你的原始代码),然后为按钮 2:
hfig = ancestor(gcbo,'figure') ; %// find the handle of the current figure
hax = findobj( hfig , 'type', 'axes') ; %// find the handle of the axes inside the main figure
hfig2 = figure ; %// create a new figure
hax2 = copyobj(hax,hfig2); %// make a full copy of the axes in the new figure
这样您就不必重新读取所有文件并加载数据。
初始答案:
您可以使用setappdata
and getappdata
命令在图形应用程序数据中保存参数或变量。
在你的情况下,你可以保存文件列表,这样你就不需要再次检索它(假设你总是先使用按钮 1)。
实际绘制的函数可以分开,不需要重复代码。只需使用目标 axes
的句柄(地址)作为参数。
所以 按钮 1 的代码
%// get the folder location and list of files
d= uigetdir(pwd, 'Select a folder');
fileList = dir(fullfile(d, '*.txt'));
hfig = ancestor(gcbo,'figure') ; %// find the handle of the current figure
hax = findobj( hfig , 'type', 'axes') ; %// find the handle of the axes inside the main figure
setappdata( hfig , 'fileList' , fileList ) ; %// save the file list in the figure application data
plot_files( fileList , hax ) %// call the ploting function, specifying the CURRENT axes as destination
按钮 2 的代码
hfig = ancestor(gcbo,'figure') ; %// find the handle of the current figure
fileList = getappdata( hfig , 'fileList' ) ; %// retrieve the file list in the figure application data
hfig2 = figure ; %// create a new figure
hax2 = axes('Parent',hfig2) ; %// create an axes in the new figure
plot_files( fileList , hax2 ) %// call the ploting function, specifying the NEW axes as destination*
在 .m
文件末尾的某处,放置 绘图函数:
%% // Code for function to place somewhere at the bottom of your .m file
function plot_files( fileList , selectedAxe )
len = length(files);
linecolors = jet(len);
for i = 1:len
a = files(i).name;
filename{i} = a;
path = [d,'\',a];
data = dlmread(path);
plot(data(:,1), data(:,2),'color',linecolors(i,:),'linewidth',2,'Parent',selectedAxe );
hold on;
end
hold off;
xlabel('Intensity','fontweight','bold');
ylabel('Wave Number','fontweight','bold');
title('Spectra Plot','fontweight','bold','fontsize',14);
legend(filename,'Interpreter','none', 'location', 'southoutside');
end
注意:根据代码中其他函数的定义方式,您可能必须删除绘图函数的最后一个 end
。 (如果你所有的函数都以 end
结束,那么保留这个,否则就删除它)。
你好,我制作了一个带有按钮的 GUI select 一个包含文件的文件夹,然后将它们全部绘制在 GUI 中的单个轴上。
我还做了一个按钮,这样如果用户想在新图中打开这个图,他们就可以。但是,对于此按钮,他们必须再次 select 相同的文件夹(我所做的只是包括图形;轴;在相同的代码中)。但是有没有办法保存 selected 的数据,这样他们就不必再次选择文件夹了?我正在考虑使用复制文件功能,但我不知道该怎么做...
这是第一个按钮(导入数据)的代码:
d= uigetdir(pwd, 'Select a folder');
files = dir(fullfile(d, '*.txt'));
len = length(files);
linecolors = jet(len);
for i = 1:len
a = files(i).name;
filename{i} = a;
path = [d,'\',a];
data = dlmread(path);
plot(data(:,1), data(:,2),'color',linecolors(i,:),'linewidth',2);
hold on;
end
hold off;
xlabel('Intensity','fontweight','bold');
ylabel('Wave Number','fontweight','bold');
title('Spectra Plot','fontweight','bold','fontsize',14);
legend(filename,'Interpreter','none', 'location', 'southoutside');
这是第二个按钮(在新图中打开)的代码,只有 2 行(第 5 行和第 6 行):
d= uigetdir(pwd, 'Select a folder');
files = dir(fullfile(d, '*.txt'));
len = length(files);
linecolors = jet(len);
figure();
axes;
for i = 1:len
a = files(i).name;
filename{i} = a;
path = [d,'\',a];
data = dlmread(path);
plot(data(:,1), data(:,2),'color',linecolors(i,:),'linewidth',2);
hold on;
end
hold off;
xlabel('Intensity','fontweight','bold');
ylabel('Wave Number','fontweight','bold');
title('Spectra Plot','fontweight','bold','fontsize',14);
legend(filename,'Interpreter','none', 'location', 'southoutside');
有人可以帮忙吗?
谢谢
薇拉
您可以在 Matlab 中使用 savefig 命令保存图形,按下按钮即可加载该图形。 写入
savefig('figure1.fig')
在第一段代码的末尾。而只是
openfig('figure1.fig','new')
在第二位代码中。
编辑:现在我读了你对另一个答案的评论,有一种更快的方法来做你想做的事。第一个答案解释了如何从你的 gui 的不同部分保存和检索值,但你所需要的只是在一个新的图形中复制你的轴。
所以实现这一点的另一种方法是: 为按钮 1 保留完全相同的代码(我的代码甚至是你的原始代码),然后为按钮 2:
hfig = ancestor(gcbo,'figure') ; %// find the handle of the current figure
hax = findobj( hfig , 'type', 'axes') ; %// find the handle of the axes inside the main figure
hfig2 = figure ; %// create a new figure
hax2 = copyobj(hax,hfig2); %// make a full copy of the axes in the new figure
这样您就不必重新读取所有文件并加载数据。
初始答案:
您可以使用setappdata
and getappdata
命令在图形应用程序数据中保存参数或变量。
在你的情况下,你可以保存文件列表,这样你就不需要再次检索它(假设你总是先使用按钮 1)。
实际绘制的函数可以分开,不需要重复代码。只需使用目标 axes
的句柄(地址)作为参数。
所以 按钮 1 的代码
%// get the folder location and list of files
d= uigetdir(pwd, 'Select a folder');
fileList = dir(fullfile(d, '*.txt'));
hfig = ancestor(gcbo,'figure') ; %// find the handle of the current figure
hax = findobj( hfig , 'type', 'axes') ; %// find the handle of the axes inside the main figure
setappdata( hfig , 'fileList' , fileList ) ; %// save the file list in the figure application data
plot_files( fileList , hax ) %// call the ploting function, specifying the CURRENT axes as destination
按钮 2 的代码
hfig = ancestor(gcbo,'figure') ; %// find the handle of the current figure
fileList = getappdata( hfig , 'fileList' ) ; %// retrieve the file list in the figure application data
hfig2 = figure ; %// create a new figure
hax2 = axes('Parent',hfig2) ; %// create an axes in the new figure
plot_files( fileList , hax2 ) %// call the ploting function, specifying the NEW axes as destination*
在 .m
文件末尾的某处,放置 绘图函数:
%% // Code for function to place somewhere at the bottom of your .m file
function plot_files( fileList , selectedAxe )
len = length(files);
linecolors = jet(len);
for i = 1:len
a = files(i).name;
filename{i} = a;
path = [d,'\',a];
data = dlmread(path);
plot(data(:,1), data(:,2),'color',linecolors(i,:),'linewidth',2,'Parent',selectedAxe );
hold on;
end
hold off;
xlabel('Intensity','fontweight','bold');
ylabel('Wave Number','fontweight','bold');
title('Spectra Plot','fontweight','bold','fontsize',14);
legend(filename,'Interpreter','none', 'location', 'southoutside');
end
注意:根据代码中其他函数的定义方式,您可能必须删除绘图函数的最后一个 end
。 (如果你所有的函数都以 end
结束,那么保留这个,否则就删除它)。