Adding a legend for different data sets

13 ビュー (過去 30 日間)
BobbyJoe
BobbyJoe 2021 年 2 月 2 日
回答済み: Star Strider 2021 年 2 月 3 日
Hi I have the following code:
function API1
function C=kinetics(theta,t)
c0=[0.575;0.748;0]; %Initial Concentration
[T,Cv]=ode45(@DifEq,t,c0);
function dC=DifEq(t,c)
dcdt=zeros(3,1);
dcdt(1)=-theta(1).*(c(1).^1).*c(2).^1;
dcdt(2)=-theta(1).*(c(1).^1).*c(2).^1;
dcdt(3)=theta(1).*(c(1).^1).*c(2).^1;
dC=dcdt;
end
C=Cv;
end
T = [0 10 20 30]; %X coordinates
t = T';
%Y values for A
a_ydata = [0.575 0.1611725 0.10373 0.0999925];
A_Ydata = a_ydata';
%Y values for B
b_ydata = [0.748 0.3336725 0.27623 0.2724925];
B_Ydata = b_ydata';
%Y values for C
c_ydata = [0 0.4138275 0.47127 0.4750075];
C_Ydata = c_ydata';
c = [A_Ydata B_Ydata C_Ydata];
theta0=[0.5]; %Initial guess
[theta,Rsdnrm,Rsd,ExFlg,OptmInfo,Lmda,Jmat]=lsqcurvefit(@kinetics,theta0,t,c);
fprintf(1,'\tRate Constants:\n')
for k1 = 1:length(theta)
fprintf(1, '\t\tTheta(%d) = %8.5f\n', k1, theta(k1))
end
tv = linspace(min(t), max(t));
Cfit = kinetics(theta, tv);
figure(1)
h = plot(t, c,'.');
set(h,{'Marker'},{'s';'d';'^'},{'MarkerFaceColor'},{'r';'b';'k'},{'MarkerEdgeColor'},{'r';'b';'k'});
hold on
hlp = plot(tv, Cfit,'LineWidth',1.5);
set(hlp,{'Color'},{'r';'b';'k'});
hold off
grid
xlabel('Time (min)')
ylabel('Concentration (M)')
legend(hlp, 'Rif', 'Tert', 'Oxazine', 'Location','N')
Cfit_mtx = kinetics(theta, t); % Calculate R² For Each Compartment
for k = 1:size(Cfit,2)
ypred = Cfit_mtx(:,k);
SSE = sum((c(:,k)-ypred).^2);
SST = sum((c(:,k)-mean(c(:,k))).^2);
Rsq(k) = 1 - (SSE/SST);
fprintf('\t\tR² c(%d) = %7.4f\n',k, Rsq(k))
end
end
When I plot the figure, I want to have a legend that shows both the data points and the best fit lines but i am only able to show one or the other.
Can anyone help me? Thanks.

回答 (1 件)

Star Strider
Star Strider 2021 年 2 月 3 日
The way I originally wrote that code, the points and the best fit lines all appeared (subsequent revisions had the data and line colours the same, not present in the original). See if using a different marker (other than '.') will show the data.
That all worked correctly in the code I originally wrote for you about three weeks ago in Predicting the kinetic constant of a reaction based on experimental data (attached here again).

カテゴリ

Help Center および File ExchangeAnnotations についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by