MATLAB 中的长度缩放方向数据
Length scaling orientation data in MATLAB
问题
我有一个描述地质构造的数据集。每个结构都有一行,其中包含两个属性 - 它的长度和方向(0-360 度)。
在这个数据集中,有两种结构。
- 类型 1:数据点较少,但结构在物理上更大(大
length
,因此更重要)。
- 类型 2:更多数据点,但结构在物理上更小(小
length
,因此意义不大)。
我想创建一个 rose plot 来显示结构方向的分布。但是,我希望这张图也能结合结构所面对的方向来代表结构的重要性 - 考虑到长度。
是否可以在 MATLAB 中以某种方式按长度缩放它,以便当结构较大时,数量较少的子集不会被低估?
例子
数据集可能包含:
- 10座南北走向的建筑物,长50公里。
- 100座东西向建筑,长0.5公里。
在这种情况下,根据绝对数字,东西向人口看起来比南北向人口更重要。然而,实际上,对这个人口做出贡献的成员的长度要小得多,因此结构不那么重要。
代码
这是我目前的代码:
load('WG_rose_data.xy')
azimuth = WG_rose_data(:,2);
length = WG_rose_data(:,1);
rose(azimuth,20);
其中 WG_rose_data.xy
是一个包含 2 列的数据文件,其中包含地质结构的长度和方位角(方位)数据。
对于数据中的每一行,您可以根据其长度值将其复制给定的次数。因此,如果您有一个长度为 50 的结构,则它计为 50 个数据点,而长度为 1 的结构仅计为 1 个数据点。当然你必须四舍五入你的长度,因为你只能有整数行。
这可以像这样实现,使用矩阵中的示例数据 d
% Set up example data: 10 large vertical structures, 100 small ones perpendicular
d = [repmat([0, 50], 10, 1); repmat([90, .5], 100, 1)];
% For each row, duplicate the data in column 1, according to the length in column 2
d1 = [];
for ii = 1:size(d,1)
% make d(ii,2) = length copies of d(ii,1) = orientation
d1(end+1:end+ceil(d(ii,2))) = d(ii,1);
end
输出玫瑰图:
您可以微调如何复制数据,以实现实际数据和长度权重之间的理想平衡。
感谢您为此提供的所有帮助。此代码是我最终的工作版本供参考:
clear all
close all
% Input dataset
original_data = load('WG_rose_data.xy');
d = [];
%reformat azimuth
d(:,1)= original_data(:,2);
%reformat length
d(:,2)= original_data(:,1);
% For each row, duplicate the data in column 1, according to the length in column 2
d1 = [];
for a = 1:size(d,1)
d1(end+1:end+ceil(d(a,2))) = d(a,1);
end
%create oposite directions for rose diagram
length_d1_azi = length(d1);
d1_op_azi=zeros(1,length_d1_azi);
for i = 1:length_d1_azi
d1_op_azi(i)=d1(i)-180;
if d1_op_azi(i) < 1;
d1_op_azi(i) = 360 - (d1_op_azi(i)*-1);
end
end
%join calculated oposites to original input
new_length = length_d1_azi*2;
all=zeros(new_length,1);
for i = 1:length_d1_azi
all(i)=d1(i);
end
for j = length_d1_azi+1:new_length;
all(j)=d1_op_azi(j-length_d1_azi);
end
%convert input aray into radians to plot
d1_rad=degtorad(all);
rose(d1_rad,24)
set(gca,'View',[-90 90],'YDir','reverse');
问题
我有一个描述地质构造的数据集。每个结构都有一行,其中包含两个属性 - 它的长度和方向(0-360 度)。
在这个数据集中,有两种结构。
- 类型 1:数据点较少,但结构在物理上更大(大
length
,因此更重要)。 - 类型 2:更多数据点,但结构在物理上更小(小
length
,因此意义不大)。
我想创建一个 rose plot 来显示结构方向的分布。但是,我希望这张图也能结合结构所面对的方向来代表结构的重要性 - 考虑到长度。
是否可以在 MATLAB 中以某种方式按长度缩放它,以便当结构较大时,数量较少的子集不会被低估?
例子
数据集可能包含:
- 10座南北走向的建筑物,长50公里。
- 100座东西向建筑,长0.5公里。
在这种情况下,根据绝对数字,东西向人口看起来比南北向人口更重要。然而,实际上,对这个人口做出贡献的成员的长度要小得多,因此结构不那么重要。
代码
这是我目前的代码:
load('WG_rose_data.xy')
azimuth = WG_rose_data(:,2);
length = WG_rose_data(:,1);
rose(azimuth,20);
其中 WG_rose_data.xy
是一个包含 2 列的数据文件,其中包含地质结构的长度和方位角(方位)数据。
对于数据中的每一行,您可以根据其长度值将其复制给定的次数。因此,如果您有一个长度为 50 的结构,则它计为 50 个数据点,而长度为 1 的结构仅计为 1 个数据点。当然你必须四舍五入你的长度,因为你只能有整数行。
这可以像这样实现,使用矩阵中的示例数据 d
% Set up example data: 10 large vertical structures, 100 small ones perpendicular
d = [repmat([0, 50], 10, 1); repmat([90, .5], 100, 1)];
% For each row, duplicate the data in column 1, according to the length in column 2
d1 = [];
for ii = 1:size(d,1)
% make d(ii,2) = length copies of d(ii,1) = orientation
d1(end+1:end+ceil(d(ii,2))) = d(ii,1);
end
输出玫瑰图:
您可以微调如何复制数据,以实现实际数据和长度权重之间的理想平衡。
感谢您为此提供的所有帮助。此代码是我最终的工作版本供参考:
clear all
close all
% Input dataset
original_data = load('WG_rose_data.xy');
d = [];
%reformat azimuth
d(:,1)= original_data(:,2);
%reformat length
d(:,2)= original_data(:,1);
% For each row, duplicate the data in column 1, according to the length in column 2
d1 = [];
for a = 1:size(d,1)
d1(end+1:end+ceil(d(a,2))) = d(a,1);
end
%create oposite directions for rose diagram
length_d1_azi = length(d1);
d1_op_azi=zeros(1,length_d1_azi);
for i = 1:length_d1_azi
d1_op_azi(i)=d1(i)-180;
if d1_op_azi(i) < 1;
d1_op_azi(i) = 360 - (d1_op_azi(i)*-1);
end
end
%join calculated oposites to original input
new_length = length_d1_azi*2;
all=zeros(new_length,1);
for i = 1:length_d1_azi
all(i)=d1(i);
end
for j = length_d1_azi+1:new_length;
all(j)=d1_op_azi(j-length_d1_azi);
end
%convert input aray into radians to plot
d1_rad=degtorad(all);
rose(d1_rad,24)
set(gca,'View',[-90 90],'YDir','reverse');