How do I insert a variable text string in matlab plot?

Part of my code is
d_close = 3*(r1_eq + r2_eq)
figure(101);
h1 = plot(normalized_time, r1_us, 'b-', normalized_time, r2_us, 'k:');
set(h1,'linewidth',2);
txt = ['d = ', num2str(d_close)];
% t = text(0.0025, 17, txt);
t.FontSize = 24;
legend(['Bubble-1'], ['Bubble-2'])
and so on...
I wish to put sort of additional "third" legend for a plot that has two curves (r1_us and r2_us versus normalized time) only. So, I had to opt for string-method to put the additional information on the plot. But when I run the code, I get the error
Unable to perform assignment because dot indexing is not supported for variables of this type.
Error in bubble_mettin_solver (line 25)
t.FontSize = 24;
So how do I fix this? Please help. I wish that every time the plot shows up it has the information of updated d_close value.
By the way can I have a third legend in which there are only two curves? I know how to implement variable legend, but not the text.

6 comentarios

upload datas of r1_eq and r2_eq
The actual code is this:
clc;
clear all;
%close all;
time_range = [0 0.6d-4];
r1_eq = 10d-6;
r2_eq = 10d-6;
f_s = 20000;
initial_conditions = [r1_eq 0.d0 r2_eq 0.d0];
[t, r] = ode45('bubble_mettin', time_range, initial_conditions);
r1_us=1000000*r(:,1);
r1dot=r(:,2);
r2_us=1000000*r(:,3);
r2dot=r(:,4);
max_radii_combined = (max(r2_us) + max (r1_us))/1d6
d_close = 3*(r1_eq + r2_eq)
d_far = 300*(r1_eq + r2_eq)
diff_close_safe_positive = d_close - max_radii_combined
diff_far_safe_positive = d_far - max_radii_combined
figure(101);
normalized_time = t./(1/f_s);
h1 = plot(normalized_time, r1_us, 'b-', normalized_time, r2_us, 'k:');
set(h1,'linewidth',2);
txt = ['d = ', num2str(d_close)];
% t = text(0.0025, 17, txt);
t.FontSize = 24;
legend(['Bubble-1'], ['Bubble-2'])
legend('Location','Northwest')
set(gca,'xscale','linear','FontSize',26)
set(gca,'yscale','linear','FontSize',26)
set(gca,'XMinorTick','on')
set(gca,'YMinorTick','on')
%xlim([0 1]);
%ylim([0 24]);
%axis 'auto x'
grid off
xlabel('Normalized time, $t/T_{s}$','interpreter','latex','FontSize',34);
ylabel('Radii, $R_{1,2 \mbox{ }} (\mu m)$','interpreter','latex','FontSize',34)
hold off
bubble_mettin?
I have partly fixed it myself using: But how do I latex the fonts and also how do I increase its size.
text(0.2, 21, sprintf('d = ', num2str(d_close)));
text.FontSize = 34;
text.Fontsize does not seem to work.
Get rid of these square breckets:
legend(['Bubble-1'], ['Bubble-2'])
They do nothing useful whatsoever:
Agreed. removed but currently I am facing another issue.

Iniciar sesión para comentar.

 Respuesta aceptada

madhan ravi
madhan ravi el 13 de Nov. de 2018
Editada: madhan ravi el 14 de Nov. de 2018
t=text(0.2, 21, ['d = ' num2str(d_close)]);
t.FontSize = 34;
Vikash pandey's solution:
txt = text(0.03, 21, ("$d =\mbox{ }$" + d_close*1d6 + "$\mu m$"),'Interpreter','latex');
txt.FontSize = 28;

19 comentarios

Vikash Pandey
Vikash Pandey el 13 de Nov. de 2018
Editada: Vikash Pandey el 13 de Nov. de 2018
Tried:
txt = texlabel('d = ', d_close);
text(0.2,20,txt)
did not worked. The value of d is missing.
madhan ravi
madhan ravi el 13 de Nov. de 2018
Editada: madhan ravi el 13 de Nov. de 2018
txt = texlabel('d = ', d_close);
should be
txt = texlabel(['d = ', num2str(d_close)]);
Thanks Madhan. Appreciated.
Anytime :)
Vikash Pandey
Vikash Pandey el 13 de Nov. de 2018
Editada: Vikash Pandey el 13 de Nov. de 2018
Madhan, What if I wish to have mu m in latex (greek letters) after the value of d_close?
I tried:
txt = text(0.05, 21, texlabel(['d = ' num2str(d_close) 'mu m']));
Did not worked.
Vikash Pandey
Vikash Pandey el 13 de Nov. de 2018
Editada: Vikash Pandey el 13 de Nov. de 2018
Update: I got it to work partly
txt = text(0.05, 21, (['d = ' num2str(d_close), '\mu m']));
txt.FontSize = 24;
But, "m" does not look like a mathematical character as it looks neat in latex. Here in Matlab it looks like just a regular alphabetic letter. I wish mu and m to appear as they appear from latex coding $\mu m$ in the respective pdf file.
yes where were we? so you want to display mu and m?
madhan ravi
madhan ravi el 13 de Nov. de 2018
Editada: madhan ravi el 13 de Nov. de 2018
There you go!
a='\mu','Interpreter','latex'
txt = text(0.05, 21, ['d = ' num2str(d_close), a,'m']);
txt.FontSize = 24;
tried, No change at all. Same as before. "m" looks like regular alphabet.
madhan ravi
madhan ravi el 13 de Nov. de 2018
Editada: madhan ravi el 13 de Nov. de 2018
by the way how does your variable m is in latex form in the(ylabel) picture below?
Vikash Pandey
Vikash Pandey el 13 de Nov. de 2018
Editada: Vikash Pandey el 13 de Nov. de 2018
So no remedy for latex letters in text string?
For the labels, I used this:
xlabel('Normalized time, $t/T_{s}$','interpreter','latex','FontSize',34);
ylabel('Radii, $R_{1,2 \mbox{ }} (\mu m)$','interpreter','latex','FontSize',34)
madhan ravi
madhan ravi el 13 de Nov. de 2018
Editada: madhan ravi el 13 de Nov. de 2018
Guess so ,did a lot of research but couldn't succeed though!
It happens. It is okay, not a big deal so far. I was looking for that only for aesthetic purposes. By the way I have posted one more problem in case it interests you.
https://www.mathworks.com/matlabcentral/answers/429660-how-do-i-output-the-second-derivative-from-ode-solver-for-further-use
FYI, I found an alternative way:
txt = text(0.03, 21.5,'$$d = 33 \mu m$$', 'interpreter','latex')
txt.FontSize = 28;
cool but you dont get to use num2str do you?
Nope, num2str makes it difficult to work. But I have to get 10 plots or so. I will do hard-coding as shown above to obtain relatively good plots. By the way, had a look at this: https://www.mathworks.com/matlabcentral/answers/429660-how-do-i-output-the-second-derivative-from-ode-solver-for-further-use
?
Madhan. I found the solution to the problem from a user in Stackoverflow. The solution is:
txt = text(0.03, 21, ("$d =\mbox{ }$" + d_close*1d6 + "$\mu m$"),'Interpreter','latex');
txt.FontSize = 28;
wow that's cool!

Iniciar sesión para comentar.

Más respuestas (2)

Jan
Jan el 13 de Nov. de 2018
Start with omitting the clear all, because this is a waste of time only. The error message is clear: Your t is the output of ode45() and a double vector. Then you cannot define t.FontSize. In the line before, the t would have been re-defined, but it is commented:
% t = text(0.0025, 17, txt);
Either delete the "%" character there or better use a unique name for the variable:
TestH = text(0.0025, 17, txt);
TextH.FontSize = 24;
It is not clear, what a "third legend" is. There is one legend only and not even a second one. Do you want to get a third entry in this legend? This would be confusing, because readers expect the same number of lines as legend entries. Maybe an additional title helps: https://www.mathworks.com/matlabcentral/answers/324848-setting-a-title-for-a-legend

1 comentario

Thanks for the advise. I corrected it. But still a minor issue remains. Please see above.

Iniciar sesión para comentar.

Vikash Pandey
Vikash Pandey el 13 de Nov. de 2018
Yes. you see the plot here, mu looks so different than m in the plot. I want them to be latex equally. By the way I have solved the bubble coupled ODE problem that I had posted yesterday. Hope you remember. :)
Similar_Size_Far_Radius.png

Categorías

Preguntada:

el 13 de Nov. de 2018

Editada:

el 14 de Nov. de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by