gpt4 book ai didi

matlab - 基于单列变量创建图

转载 作者:行者123 更新时间:2023-12-05 05:38:19 25 4
gpt4 key购买 nike

我是 Matlab 社区的新手,需要帮助完成特定的绘图任务!如有任何帮助,我们将不胜感激。

我的任务是创建一个自动化流程,根据我们在现场收集的调查数据,使用 X(高程)和 Y(桩号)数据生成大量二维线图。该 XY 数据需要根据“Profile_ID”列中的变量拆分为不同的图形。数据示例如下所示:

<表类="s-表"><头>东方北方高度桩号FC姓名个人资料_ID<正文>219578.603101400.2936.675133.393CE不适用7b01346219577.925101400.6216.088134.146X不适用7b01346219577.833101400.7096.037134.267X不适用7b01346219577.378101400.7895.904134.714X不适用7b01346219577.319101400.9875.887134.850X不适用7b01346

PROFILE_ID 在整个 .txt 文件中发生变化。文件按照profile_id排序,然后是chainage

但是,我还需要将之前的调查数据叠加到同一个对应的“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

所以我目前已将数据分类到组中,现在需要绘制每个单独的组,然后最终将之前的数据叠加到相应的组数据。

最佳答案

一种方法是将所有数据(旧的和新的)合并到一个表中,然后找到唯一的 ID 并循环处理它们。对于每个 ID,您可以识别相关行并绘制它们。

请注意,table2array 在当前代码中的使用让您的生活变得更加艰难,表很好,因为您可以直接使用列名索引列,所以:

table2array(point_file_new(:,3));

变成这样:

point_file_new.Elevation;

注释代码如下:

data_old = readtable('7b7B3-2_20170627tp.csv'); %Input older file name here
data_old.Source(:) = {'Old'}; % Add this column so we can track the source later
data_new = readtable('20220430_7b7B3-2tp.csv'); %Input newer file name here
data_new.Source(:) = {'New'}; % Add this column so we can track the source later

data_all = [data_old; data_new]; % combine data into single table

IDs = unique( data_all.Profile_ID ); % Get unique Profile_ID values
NID = numel(IDs); % Number of unique IDs
for ii = 1:NID
ID = IDs{ii}; % Current ID
idxID = ismember( data_all.Profile_ID, ID ); % Rows with this ID
idxOld = strcmp(data_all.Source, 'Old'); % Rows from old data
idxOld = idxOld & idxID; % Rows from old data and this ID
idxNew = strcmp(data_all.Source, 'New'); % Rows from new data
idxNew = idxNew & idxID; % Rows from new data and this ID

figure(); % Make a new figure for this ID
hold on; % hold so we can plot multiple lines
plot( data_all.Elevation(idxOld), data_all.Chainage(idxOld), 'displayname', 'Old data' ); % plot old
plot( data_all.Elevation(idxNew), data_all.Chainage(idxNew), 'displayname', 'New data' ); % plot new
% Add labels/title
xlabel( 'Chainage (m)' );
ylabel( 'Elevation (m)' );
title( ID );
grid on;
hold off; % done plotting
legend('show','location','best');
end

关于matlab - 基于单列变量创建图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72951226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com