I do a trail of following  MATLAB code : to clasfying the geological faults which are broken on rock formations represnting by inverted depths ( z_inv_Bouguer) whch can reading from the annexed Excel file : I need to draw faults like in annexed figure  dependenig on basis of angles (Theta) drived from gradient of each curve.
N = 9;  % Number of stacked layers
M = 201; % Number of digitized points
xc = data(:, 1); % x-axis direction 
z_inv_Bouguer = data(:,3:end) ; % z_inv_Bouguer curves
% Initialize arrays to store fault locations based on angle classifications
normal_fault_locations = [];
reverse_fault_locations = [];
strike_slip_fault_locations = [];
other_fault_locations = [];
for i = 1:N
    % Calculate gradient of z_inv_Bouguer curves
    for j = 1:M
        Theta = rad2deg(atan(z_inv_Bouguer(j,i) ./ xc(j)));
        
        % Define thresholds for classifying faults
        normal_fault_threshold  = 90; % Adjust as needed
        reverse_fault_threshold = 45; % Adjust as needed
        % Classify faults based on angle
        if abs(Theta) <= normal_fault_threshold
            normal_fault_locations = [normal_fault_locations; [xc(j),...
                z(i)]];
        elseif abs(Theta) > reverse_fault_threshold
            reverse_fault_locations = [reverse_fault_locations; [xc(j),...
                z(i)]];
        elseif abs(Theta) > normal_fault_threshold...
                && abs(Theta) <= reverse_fault_threshold
            strike_slip_fault_locations = [strike_slip_fault_locations;
                [xc(j), z(i)]];
        else
            other_fault_locations = [other_fault_locations; [xc(j), z(i)]];
        end
    end
end
 % Plotting results
figure;
% Plot z_inv_Bouguer curves
for i = 1:N
    plot(xc, z_inv_Bouguer(:, i), 'LineWidth', 1);
    hold on;
end
% Plot normal fault locations
if ~isempty(normal_fault_locations)
    scatter(normal_fault_locations(:, 1),...
        normal_fault_locations(:, 2),...
        'r', 'filled', 's', 'DisplayName', 'Normal Faults');
    hold on;
end
% Plot reverse fault locations
if ~isempty(reverse_fault_locations)
    scatter(reverse_fault_locations(:, 1)...
        , reverse_fault_locations(:, 2)...
        , 'b', 'filled', 'o', 'DisplayName', 'Reverse Faults');
    hold on;
end
% Plot strike-slip fault locations
if ~isempty(strike_slip_fault_locations)
   scatter(strike_slip_fault_locations(:, 1)...
        , strike_slip_fault_locations(:, 2)...
        , 'g', '+', 'DisplayName', 'Strike-Slip Faults');
   hold on;
end
% Plot other fault locations (if any)
if ~isempty(other_fault_locations)
   scatter(other_fault_locations(:, 1)...
        , repmat(min(z), size(other_fault_locations, 1), 1)...
        , 'm', 'filled', 'v', 'DisplayName', 'Other Faults');
    hold on;
end
set(gca, 'YDir', 'reverse');
title(' z_inv_Bouguer with Classified Faults');
xlabel('Profile Points-xc');
ylabel('Depth (km)');
legend('show');
grid on;
%Thanks in advance