overplotting 6 graphs by changing into 3 graphs

2 次查看(过去 30 天)
Two M-files one contains differential equations and another one to run and plot the graphs. since i am using ode solver, it has two files to run.
THERE ARE 4 MATLAB CODES WITH 4 SEPARATE MATLAB M-FLIES BUT 2 M-FILES TO PRODUCE 3 PLOTS AND ANOTHER 2 M-FILES TO PRODUCE ANOTHER 3 GRAPHS. BUT I WANT TO OVERPLOTS THESE 6 PLOTS INTO 3 PLOTS ONLY.
HERE ARE THE FIRST two M-files, ONE contains differential equations and another one CONTAINS plotting the graphs. since i am using ode solver, it has two files.
% Creating recent original 3 ode without scaling any parameters and c.
function xprime= ns(t,x)
I=1200; % light intensity
%values of parameters
k_f= 6.7*10.^7;
k_d= 6.03*10.^8;
k_n=2.92*10.^9;
k_p=4.94*10.^9;
alpha =1.14437*10.^-3;
%Unknown parameters
lambda_b= 0.0087;
lambda_r =835;
gamma =2.74;
%Pool Values
P_C= 3 * 10.^(11);
P_Q= 2.87 * 10.^(10);
% initial conditions
c=x(1);
s=x(2);
q=x(3);
%Non-linear differential equations.
% dc/dt= alpha*I + c(- k_f - k_d - k_n * s - k_p*(1-q))
% ds/dt = lambda_b * c* P_C *(1-s)- lambda_r *(1-q)*s
% dq/dt = (1-q)* k_p * c *(P_C / P_Q)- gamma * q
xprime = zeros(3,1); % a column vector
xprime(1)= alpha*I + c*(- k_f - k_d - k_n * s - k_p*(1-q));
xprime(2)= lambda_b *(1-s)*c* P_C - lambda_r *(1-q)*s;
xprime(3)=(1-q)*k_p* c*(P_C / P_Q)- gamma * q;
% TO RUN the recent original odes with t= 0.2 *10^-9
format bank
close all;
clear all;
clc;
epison= 10.^-9;
%time interval
ti=0;
tf=0.2*epison;
tspan=[ti tf];
x0=[0.25 0.02 0.98]; %initial conditions
%time interval of [0 2] with initial condition vector [0.25 0.02 0.98] at time 0.
options= odeset('RelTol',1e-9, 'AbsTol',[1e-9 1e-9 1e-9]);
[t,x]= ode23s(@ns,tspan,x0,options);
dt = t(2:end)-t(1:end-1); % number of time step size it is using
%Plotting the graphs:
plot(t(2:end), t(2:end)-t(1:end-1)); % plotting the time step size.
title('Time steps for 3 recent original odes (c,s,q), time =0.2*10^-9 ');
ylabel('t'), xlabel('t_n');
figure
subplot(3,1,1), plot(t,x(:,1),'r'),grid on;
title('3 recent original odes, time =0.2*10^-9 '),ylabel('c');
subplot(3,1,2), plot(t,x(:,2),'b'),grid on;
ylabel('s');
subplot(3,1,3), plot(t,x(:,3),'g'),grid on;
ylabel('q');xlabel('Time')
Another separate two M-files which contains differential equations and another contains plotting the graphs. since i am using ode solver, it has two files.
% 3 Asymptotic expansion t=0.2*10^-9 which gives tau =0.2
function xpr= no(t,x)
epison= 10.^-9;
%values of parameters
k_f= 6.7*10.^7;
k_d= 6.03*10.^8;
k_n=2.92*10.^9;
k_p=4.94*10.^9;
%Unknown parameters
lambda_b= 0.0087;
% scale parameters
K_F= k_f * epison;
K_D= k_d * epison;
K_N= k_n * epison;
K_P= k_p * epison;
LAMBDA_B= lambda_b* epison;
%Pool Values
P_C= 3 * 10.^(11);
P_Q= 2.87 * 10.^(10);
% initial conditions
c_0=x(1);
s_0=x(2);
q_0=x(3);
%Non-linear differential equations.
% dc_0/dtau= c_0*(- K_F - K_D - K_N * s_0 - K_P*(1-q_0))
% ds_0/dtau = Lambda_B * c* P_C *(1-s_0)
% dq_0/dtau = (1-q_0)* K_P * c_0 *(P_C / P_Q)
% dc_0/dt= c_0*(- K_F - K_D - K_N * s_0 - K_P*(1-q_0))
% ds_0/dt = Lambda_B * c_0* P_C *(1-s_0)
% dq_0/dt = (1-q_0)* K_P * c_0 *(P_C / P_Q)
xpr= zeros(3,1);
xpr(1)=c_0*(- K_F - K_D - K_N * s_0 - K_P*(1-q_0));
xpr(2)= LAMBDA_B * c_0*P_C *(1-s_0);
xpr(3)= (K_P * c_0*P_C*(1-q_0)) / P_Q;
% TO RUN 3 asymptotic expansion for c_0,s_0 and q_0
format bank
close all;
clear all;
clc;
epison= 10.^-9;
%time interval
ti=0;
tf=0.2*epison;
tspan=[ti tf];
x0=[0.25 0.02 0.98]; %initial conditions
%time interval of [0 2] with initial condition vector [0.25 0.02 0.98] at time 0.
options= odeset('RelTol',1e-9, 'AbsTol',[1e-9 1e-9 1e-9]);
[t,x]= ode23s(@no,tspan,x0,options);
dt = t(2:end)-t(1:end-1); % number of time step size it is using
%Plotting the graphs:
plot(t(2:end), t(2:end)-t(1:end-1)); % plotting the time step size.
title('Time steps for 3 asymptotic expansions (c_0,s_0, q_0) at tau=0.2');
ylabel('t'), xlabel('t_n');
figure
subplot(3,1,1), plot(t,x(:,1),'r'),grid on;
title('3 asymptotic expansion when t=0.2*epsion, tau= t/epison, so tau=0.2'),ylabel('c_0');
subplot(3,1,2), plot(t,x(:,2),'b'),grid on;
ylabel('s_0');
subplot(3,1,3), plot(t,x(:,3),'g'),grid on;
ylabel('q_0');xlabel('Time')
There are 6 plots from these two separate m-files which contains 3 each graphs and there are different. Now i want to overplot 3 plots by combining 6 plots together into 3 plots. I mean one overplot containing c and c_0, another for s and s_0 and last one for q and q_0 and 3 in total. Time intervals of these 3 plots can be between 0 to 0.2*10-9. please help me. i will be very much grateful and thankful for your help.

回答(1 个)

Aurele Turnes
Aurele Turnes 2014-8-6
You can plot multiple lines into one subplot by using the hold on command and removing the call to figure. In your first MATLAB file, write:
% figure % remove this line
subplot(3,1,1)
plot(t,x(:,1),'r');
grid on;
hold on; % add this line
title('3 recent original odes, time =0.2*10^-9 ');
ylabel('c');
subplot(3,1,2)
plot(t,x(:,2),'b');
grid on;
hold on; % add this line
ylabel('s');
subplot(3,1,3)
plot(t,x(:,3),'g');
grid on;
hold on; % add this line
ylabel('q');
xlabel('Time');
and in your second MATLAB file:
% figure % remove this line
subplot(3,1,1)
plot(t,x(:,1),'r');
grid on;
hold on; % add this line
title('3 asymptotic expansion when t=0.2*epsion, tau= t/epison, so tau=0.2');
ylabel('c_0');
subplot(3,1,2)
plot(t,x(:,2),'b');
grid on;
hold on; % add this line
ylabel('s_0');
subplot(3,1,3)
plot(t,x(:,3),'g');
grid on;
hold on; % add this line
ylabel('q_0');
xlabel('Time');
By doing this, it should not matter which MATLAB file you execute first. However, note that only the title, x-label and y-label for the second MATLAB file you execute will show. I would suggest using the legend function instead. You may also want to use different colors, markers or linewidth for your second MATLAB file to distinguish the two curves. For instance:
subplot(3,1,1), plot(t,x(:,1),'-*r','Linewidth',2, 'DisplayName', 'c_0');
legend('show')
Refer to the documentation pages for legend and line properties to learn more about your options.

类别

Help CenterFile Exchange 中查找有关 Line Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by