如何从Matlab中的两个单独的子文件夹绘制到同一个图上?

roqulrg3  于 11个月前  发布在  Matlab
关注(0)|答案(1)|浏览(107)

我有两个子文件夹,我想在Matlab中绘制。它们存储如下:
C:\Users\Name\OneDrive\Desktop\Outputs\Data\Phase1\out\Stats
C:\Users\Name\OneDrive\Desktop\Outputs\Data\Phase2\out\Stats
stats文件夹中有10个txt文件,编号为1到10。如何从同一图形上的两个子文件夹打印文件“1.txt”,但在图例中,打印名称为Phase 1和Phase 2?相同编号的所有文件具有相同的尺寸。因此Phase1\out\Stats\8.txt和Phase2\out\Stats\8.txt具有相同的维度。目前的数据是在一个FDS,因此细胞阵列的所有20个表,我绘制,因为我去使用'cellfun'
因为在Phase和Stats之间有另一个子文件夹,我是否应该将Stats保存到相应的Phase子文件夹中,并从那里工作,因为“out”中有其他文件?提前思考,什么是最简单的方法来工作的下拉列表,因为以后我想有它,所以所有阶段将被绘制,但用户可以选择,例如'3.txt'一个变量共同所有的'3.txt'文件,因为它们都是相同的,并将绘制该变量的所有3.txt文件。
我看到的主要问题是,我的FDS中的数据存储在一个20 x1单元格的表数组中,但我不知道如何将其转换为文件夹,例如。2 × 1单元阵列,每行包含10 × 1表格阵列。我试着改变了传说,但加载到文本框中的完整路径名称,其中涵盖了很大比例的情节。
老实说,在Matlab上没有足够的技能,不知道从这里去哪里。

Folders = dir(fullfile("C:\Users\NamE\OneDrive\Desktop\Files\Data\*\*\**\Stats\","*.txt"));

Folders = Folders(~ismember({Folders.name},{'.','..'}));

Folders_Data = struct2cell(Folders);
Folders_Data = transpose(Folders_Data);

Files_Data = struct2cell(Folders);
Files_Data = transpose(Files_Data);
Files_Data = Files_Data(:,2);
Files_Data = unique(Files_Data);

fds = fileDatastore(Files_Data, ReadFcn=@(x) readtable(x,VariableNamingRule="preserve"), FileExtensions=".txt", IncludeSubfolders=true, ReadMode="file"); 
data = readall(fds)

字符串
;

6jygbczu

6jygbczu1#

我会这么做

root1 = 'C:\Users\Name\OneDrive\Desktop\Outputs\Data\Phase1\out\Stats';
root2 = 'C:\Users\Name\OneDrive\Desktop\Outputs\Data\Phase2\out\Stats';

for i = 1:10
   file_name = sprintf('%d.txt',i);
   f1 = fullfile(root1,file_name);
   f2 = fullfile(root2,file_name);

   %Load both files
   data1 = ...
   data2 = ...

   figure(i)
   plot(data1)
   hold on
   plot(data2)
   hold off
   legend({'Phase1','Phase2'})
   title(sprintf('Results from file %d',i))
end

字符串

**编辑:**这里有一些更直接的答案。请注意,dir的结果是一个结构,而问题中的名称Folders意味着它是一个文件夹列表。我倾向于使用变量d作为dir的输出

d = dir(fullfile("C:\Users\NamE\OneDrive\Desktop\Files\Data\*\*\**\Stats\","*.txt"));

%This really is a folder name
folders = {d.folder};

%Find all Phase### folders
temp = regexp(folders,'Phase(\d+)','once','tokens');

n_files = length(temp);
folder_id = NaN(n_files,1);
for i = 1:length(temp)
    cur_match = temp{i};
    if ~isempty(cur_match)
       folder_id(i) = str2double(cur_match{1});
    end
end

%folder_id : holds ## for each phase
max_phase = max(folder_id);

%Shuffling data as requested
data2 = cell(1,max_phase);
for i = 1:max_phase
    data2{i} = data(folder_id == i);
end

相关问题