figure plot legend keep on in for loop

1 visualizzazione (ultimi 30 giorni)
mehmet salihi
mehmet salihi il 16 Mag 2021
Commentato: Walter Roberson il 17 Mag 2021
the below code is from a for loop, have three lines and i want the legend for each loop kept on in the same figure, how can i do that.
please help.
c =[1 2 3]
for c_value=1:3
figure(1)
hold on
plot(x,u(:,find(t==0.5))), grid on
xlabel(' x ');ylabel(' u '); set(gca,'YTick',(0:25:125));
set(gca,'XTick',(0:50:xmax));ylim([-10 125]);
legend([' c = ', num2str(c(c_value))],'Position',[0.77, 0.82, .1, .1]); hold all
end

Risposte (2)

Walter Roberson
Walter Roberson il 16 Mag 2021
c =[1 2 3]
ttarg = 0.5;
for c_value=1:3
figure(1)
hold on
leg = sprintf('c = %g', c(c_value));
dist = abs(t-ttarg);
mindist = min(dist);
plot(x, u(:,find(dist == mindist)), 'displayname', leg);
grid on
xlabel(' x ');ylabel(' u '); set(gca,'YTick',(0:25:125));
set(gca,'XTick',(0:50:xmax));ylim([-10 125]);
end
legend show
You need to be careful about using == to compare floating point numbers. The value you were using, 0.5, is one of the ones that can be exactly represented as a floating point number, but if the value being compared, t, is calculated in any way, there might not be an exact match. For example if t = 0:0.01:1 then you cannot be sure that 0.5 exactly is present in t. The code I post here does not assume that the value occurs exactly, and instead looks for the closest match.
Also, you did not give us enough context to be sure that there is only one 0.5 in t, so the above code is further complicated by needing to look for multiple matches.
As an arbitrary decision, the code only considers values exactly the same difference from 0.5 as being equal for this purpose. So if you had 0.49999 and 0.50001 both in t, then it happens that the second of those two is nearer to 0.5 exactly than the first of them, so it would pick the 0.50001 . But if you had 0.5 + 1/65536 * [-1 1] then the results would be exactly the same distance from 0.5 exactly, and it would pick both of them.
  1 Commento
mehmet salihi
mehmet salihi il 17 Mag 2021
the below code is enough to me and works nicely,
could you please help, for example i have another line with constat d value.
assume c =[1 2 3] and d = 1, how to write the constant d in plot with merging.
should i add the underline part
leg = sprintf('d = %g', d, 'c = %g', c(c_value));
plot(x, u(:,find(t==0.5)), 'displayname', leg); grid on
thank you for your help.
this part is working ok but need the above update on it
c =[1 2 3]
ttarg = 0.5;
for c_value=1:3
ttarg = 0.5;
figure(1)
hold on
leg = sprintf('c = %g', c(c_value));
plot(x, u(:,find(t==0.5)), 'displayname', leg); grid on
xlabel(' x ');ylabel(' u '); set(gca,'YTick',(0:25:125));
set(gca,'XTick',(0:50:xmax));ylim([-10 125]);
end
legend show

Accedi per commentare.


Sulaymon Eshkabilov
Sulaymon Eshkabilov il 16 Mag 2021
Here is the easy solution:
LB = {};
CL = 'rgb'; % Line color type
LT = '--:-'; % Line type
for ii=1:numel(c) % You can also use c instead of ii since c values are integers.
STYLE = [CL(ii) LT(ii)];
plot(x,u(:,find(t==0.5)), STYLE), hold on
LB{ii} =['c = ' num2str(c(ii))];
legend(LB{:})
end
% More efficient to put all axis labels and settings outside of the loop
xlabel(' x '); ylabel(' u '); set(gca,'YTick',(0:25:125));
set(gca,'XTick',(0:50:xmax));ylim([-10 125]);
Good luck.
  3 Commenti
Sulaymon Eshkabilov
Sulaymon Eshkabilov il 17 Mag 2021
be explicit with your found issues. As is, it is not quite clear.
Walter Roberson
Walter Roberson il 17 Mag 2021
plot(x,u(:,(t==0.5)), STYLE), hold on

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by