我是Matlab社区的新手,在一个特定的绘图任务中需要帮助!
我的任务是创建一个自动化流程,该流程使用基于我们在现场收集的测量数据的X(高程)和Y(桩号)数据生成大量二维线图。此XY数据需要根据"Profile_ID"列中的变量拆分为不同的图形。数据示例如下所示:
| 东距|北向|高程|测链|足球俱乐部|姓名|配置文件_ID|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 小行星219578.603|小行星101400.293|六点六七五|一三三三九三|行政长官|不适用|7b01346|
| 小行星219577.925|小行星101400.621|六点零八八|一三四一四六|十|不适用|7b01346|
| 小行星219577.833|小行星101400.709|六点零三七分|一三四二六七|十|不适用|7b01346|
| 小行星219577|小行星101400.789|小行星5.904|一三四七一四|十|不适用|7b01346|
| 小行星219577.319|小行星101400.987|五千八百八十七|一三四八五零|十|不适用|7b01346|
- PROFILE_ID在整个. txt文件中更改。该文件先基于profile_id排序,然后基于桩号排序 *
然而,我还需要将以前的调查数据覆盖到相同的对应"Profile_ID"图表上。因此,本质上我有2个数据集,它们具有相同的列布局,只是使用不同的X和Y数据。一个来自上一个调查,一个来自最新的调查。我希望找到一种方法,允许我运行 * for * 循环,为"profile_id"的每次迭代创建一个图形然后还覆盖具有相同"profile_id"的先前调查数据。
我希望这一切都是有意义的,我在这里链接了一个例子:Example of desired graph produced by the script, for one iteration of 'Profile_ID'
干杯!
clc
clear
close all
%Import inputs
point_file_old = readtable('7b7B3-2_20170627tp.csv'); %Input older file name here
matrix_profile_old = table2array(point_file_old(:,3:4)); %Extracting elevation & chainage column
id_old = point_file_old(:,7);
L_old = length(matrix_profile_old(:,1));
point_file_new = readtable('20220430_7b7B3-2tp.csv'); %Input newer file name here
matrix_profile_new = table2array(point_file_new(:,3:4)); %Extracting elevation & chainage column
id_new = point_file_new(:,7);
L_new = length(matrix_profile_new(:,1));
%Settings
chainage_old = matrix_profile_old(:,2); %Identifying old chainage column
elevation_old = matrix_profile_old(:,1); %Identifying old elevation column
chain_old_num = length(chainage_old); %Amount of rows in chainage
elev_old_num = length(elevation_old) %Amount of rows in elevation
chainage_new = matrix_profile_new(:,2); %Identifying old chainage column
elevation_new = matrix_profile_new(:,1); %Identifying old elevation column
chain_new_num = length(chainage_new); %Amount of rows in chainage
elev_new_num = length(elevation_new); %Amount of rows in elevation
t_old = table(chainage_old(:,1), elevation_old(:,1), table2array(id_old(:,1)));
t_new = table(chainage_new(:,1), elevation_new(:,1), table2array(id_new(:,1)));
G = findgroups(t_new(:,3));
temp = splitapply(@(varargin) {sortrows(table(varargin{:}),3)}, t_new, G); %order separated groups in terms of chainage
因此,我目前已经将数据分类到组中,现在需要绘制每个单独的组,然后最终将以前的数据覆盖到相应的组数据上。
1条答案
按热度按时间rbl8hiat1#
一种方法是将所有数据(旧的和新的)合并到一个表中,然后找到唯一的ID并循环遍历它们,对于每个ID,您可以标识相关的行并绘制它们。
请注意,当前代码中
table2array
的使用使您的工作更加困难,表很好,因为您可以直接使用列名来索引列,因此:变成了这个
注解代码如下: