fit line to 3D scatterplot

26 views (last 30 days)
Emma Jacobs
Emma Jacobs on 20 May 2023
Edited: Askic V on 21 May 2023
I'm trying to add a linear fit to my 3d scatterplot, is there an easy function that let's me do this? Thanks!
Here's my code:
sessions = [12
12
12
12
12
12
12
12
21
21
21
21
12
12
12
12];
VASdelta = [50.5
50.5
50.5
50.5
9
9
9
9
50
50
50
50
40
40
40
40];
relPower = [NaN
13.39162848
-5.151906173
22.74039589
-6.608297044
-11.53044932
-8.162916339
-9.332208193
9.440958586
44.6072671
NaN
NaN
-2.527864912
9.2589486
-11.9690337
-27.36570581];
personC = [[0.9 0.1 0];
[0.9 0.1 0];
[0.9 0.1 0];
[0.9 0.1 0];
[0 0.5 0];
[0 0.5 0];
[0 0.5 0];
[0 0.5 0];
[0 0 1];
[0 0 1];
[0 0 1];
[0 0 1];
[0 0 0];
[0 0 0];
[0 0 0];
[0 0 0];
];
scatter3(VASdelta,relPower,sessions, 50, personC, 'filled');
xlabel("Change in VAS scores")
ylabel("Change in relative delta band power (%)")
zlabel("Number of sessions")
scatter(VASdelta,relPower,(sessions/21)*50, personC, 'filled');
xlabel("Change in VAS scores")
ylabel("Change in relative delta band power (%)")

Answers (1)

Askic V
Askic V on 21 May 2023
Edited: Askic V on 21 May 2023
I'm not really sure what you want to achieve here, but if you have X and Y data and want to do a linear fit, then you can construct a line, but if you have a 3D data, then you can construct a plane to be a linear fit in case
Z = function (X,Y).
This is a small example how to construct plane as a result of linear square fit method:
clear; clc; close all
% Input random data
X = randi(10,1,10); % Replace x1, x2, ..., x10 with the actual x values
Y = randi(10,1,10); % Replace y1, y2, ..., y10 with the actual y values
Z = randi(5,1,10); % Replace z1, z2, ..., z10 with the actual z values
% Perform least squares fit
A = [X(:), Y(:), ones(10, 1)];
coefficients = lsqlin([X(:), Y(:), ones(10, 1)],Z(:))
coefficients = 3×1
0.0351 0.2803 0.6492
% Extract the calculated parameters
a = coefficients(1); b = coefficients(2); c = coefficients(3);
% Generate points as a mesh grid
x_data = linspace(min(X), max(X), 100);
y_data = linspace(min(Y), max(Y), 100);
[X_data, Y_data] = meshgrid(x_data, y_data);
Z_line = a*X_data + b*Y_data + c;
% Plot the data points and the line
scatter3(X, Y, Z, 50, 'filled', 'MarkerFaceColor', 'b');
hold on;
mesh(X_data, Y_data, Z_line, 'EdgeColor', 'r');
xlabel('X'); ylabel('Y'); zlabel('Z'); zlim([0 10]);
title('3D Linear Fit');
grid on;
hold off;

Categories

Find more on Fit Postprocessing in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!