Stack 2D line plots to create a 3D plot
Show older comments
I am trying to stack 2D plots and create a 3D plot.
Below is a part of codes to solve the ODEs and compute FFT, and they are the data sets of 2D plots that I am trying to combine.
Fs = 4000;
tspan = 0 : 1/Fs :15;
conds = [0;0;0;0];
omega = 2262.72;
Omega = 148.328;
gamma = 1.519;
tau_opt = 0.1;
topt = 3;
f = @(t,Y) [Y(2) ; -omega^2 * Y(1) + Omega^2 * Y(3) - gamma * Y(2) + sin(omega*t)*exp(-4*log(2)*(t-topt)^2/tau_opt^2) ; Y(4) ; -omega^2 * Y(3) + Omega^2 * Y(1) - gamma * Y(4)];
[ts,ys] = ode45(f, tspan, conds);
x1sol = ys(:, 1);
Fourier1 = fft(x1sol);
x2sol = ys(:, 3);
Fourier2 = fft(x2sol);
Fourier1P = abs(Fourier1).^2 ;
Fourier2P = abs(Fourier2).^2 ;
F1 = 0: Fs/length(Fourier1): Fs - Fs/length(Fourier1);
F2 = 0: Fs/length(Fourier2): Fs - Fs/length(Fourier2);
j = topt+1.0 : 0.05 : topt+2.2
gammafunc = zeros(length(j),length(tspan));
for jj = 1:numel(j)
tTHz = j(jj);
gammafunc(jj,:) = 15*exp(-30*(tspan-tTHz).^2) + gamma;
txt = ['tTHz = ',num2str(tTHz)];
plot(tspan,gammafunc(jj,:),'DisplayName',txt); hold on
xlim([2.5 7.5])
title('γ_1(t)')
end
hold on
legend show
hold off
tsol = zeros(length(tspan), length(j));
G = zeros(length(tspan), 4 ,length(j));
for ii = 1:numel(j)
tTHz = j(ii);
[tsol(:,ii),G(:,:,ii)] = ode45( @(t,G) myode_2(t, G, omega, Omega, gamma, topt, tau_opt, tspan, gammafunc(ii,:)), tspan, conds);
end
fourier1 = zeros(length(tspan), length(j));
fourier2 = zeros(length(tspan), length(j));
fourier1P = zeros(length(tspan), length(j));
fourier2P = zeros(length(tspan), length(j));
f1 = zeros(length(j), length(tspan));
f2 = zeros(length(j), length(tspan));
for ii = 1:numel(j)
fourier1(:,ii) = fft(G(:,1,ii));
fourier2(:,ii) = fft(G(:,3,ii));
fourier1P(:,ii) = abs(fourier1(:,ii)).^2 ;
fourier2P(:,ii) = abs(fourier2(:,ii)).^2 ;
f1(ii,:) = 0: Fs/length(fourier1(:,ii)): Fs - Fs/length(fourier1(:,ii));
f2(ii,:) = 0: Fs/length(fourier2(:,ii)): Fs - Fs/length(fourier2(:,ii));
end
Below I am trying to stack the 2D plots and create a 3D surface plot. Now I am in the process of stacking the 2D plots.
delta_r = zeros(length(tspan), length(j));
for ii = 1:numel(j)
t_THz = j(ii);
delta_r(:,ii) = Fourier1P - fourier1P(:,ii);
end
figure
hold all
delay = zeros(1,length(j));
for ii = 1:numel(j)
t_THz = j(ii);
delay(ii) = t_THz - topt;
plot3(ones(length(delay))*delay(ii),F1, delta_r(:,ii))
end
hold off
xlim([358 363])
ylim([-1e-4 4.5e-4])
view(-50,20)
I have 17 2D plots, but F1 and delta_r(:,ii) are 60001 × 1 arrays. So I get an error saying "error using plot3. Vectors must be the same length"
I only have 17 plots to combine with, so I don't know how to fix the issue.
Any idea?
Accepted Answer
More Answers (0)
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!