with cycle, changing the content of text

hi, matlab people
Is someone encountering the following case, or can anyone solve the following problem? any suggestion
I write a cycle to get lots of plots, at the same time I want to add text to these plots. The text content will change with the cycle.
thank you. help me please

2 comentarios

Fangjun Jiang
Fangjun Jiang el 31 de Dic. de 2011
It can be done but I have no clue if you don't provide details.
petter
petter el 1 de En. de 2012
thank you for your helpful suggestion.
the following is my code
syms f1;
A = [0.3*f1+3 , 0; 3 , 0; 3 , 0; 1 , 0];
j=0;
for m=1:2
for n=1:2
for o=1:2
for p=1:2
er=A(1,m);
ei=A(2,n);
ur=A(3,o);
ui=A(4,p);
str1='e:\photo3\photo';
j=j+1;
str=[str1 num2str(j) '.png'];
for d=1:0.5:5;
f=2:0.2:18;
e=subs(er-1i*ei,f1,f);
u=subs(ur-1i*ui,f1,f);
z = subs(abs(d*f*e*u^0.5),f1,f);
plot(f,z,':or')
hold on
end
name=[er ei;ur ui];% Here is my problem;I want to show text in figure with the content of name([er ei;ur ui]).
text(14,0.5, sprintf('Times=%d',name),'FontSize',18,'HorizontalAlignment','center','BackgroundColor',[.7 .9 .7]);
saveas(gcf,str);
close(gcf)
end
end
end
end
thank you again, please help my.

Iniciar sesión para comentar.

 Respuesta aceptada

Matt Tearle
Matt Tearle el 31 de Dic. de 2011
Something like this?
for k = 1:n
figure(k)
% get x and y
plot(x,y)
xbar = mean(x);
ybar = mean(y);
str = ['Average at x = ',num2str(xbar),', y = ',num2str(y)];
text(xbar,ybar,str)
end
sprintf is also useful for building a formatted string.
EDIT TO ADD: When I try to run your code I get a couple of problems. First, a matrix dimension problem due to f*e (instead of f.*e). Assuming that's just a typo, the next problem I run into is that sprintf doesn't accept symbolic inputs.
The simple fix to that is to convert sym to char. The bigger question is still what exactly you're hoping for as output. Do you want it to look like
Times = (3*f1)/10 + 3, 3
3, 1
If so, something like this might work
text(14,0.5, sprintf('Times=%s, %s\n%s, %s',char(er),char(ei),char(ur),char(ui)),'HorizontalAlignment','right')

1 comentario

petter
petter el 1 de En. de 2012
thank you matt tearle for your help.
According your suggestion, the code can run.
the code
syms f1;
A = [0.3*f1+3 , 0; 3 , 0; 3 , 0; 1 , 0];
j=0;
for m=1:2
for n=1:2
for o=1:2
for p=1:2
er=A(1,m);
ei=A(2,n);
ur=A(3,o);
ui=A(4,p);
str1='e:\photo3\photo';
j=j+1;
str=[str1 num2str(j) '.png'];
for d=1:0.5:5;
f=2:0.2:18;
e=subs(er-1i*ei,f1,f);
u=subs(ur-1i*ui,f1,f);
z = subs(abs(d.*f.*e.*u.^0.5),f1,f);
plot(f,z,':or')
hold on
end
name=[sprintf('er =%s\n',char(er)),sprintf('ei = %s\n',char(ei)),sprintf('ur = %s\n',char(ur)),sprintf('ui = %s',char(ui))];
%text(14,0.5, sprintf('Times=%d',name),'FontSize',18,'HorizontalAlignment','center','BackgroundColor',[.7 .9 .7]);
text(8,500, name,'FontSize',18,'HorizontalAlignment','left','BackgroundColor',[.7 .9 .7]);
saveas(gcf,str);
close(gcf)
end
end
end
end
thank you again.
another problem: in my code, I use 4 for cycle to carry out my aim, so the code run so slowly.
Is there any other way to carry out my aim??

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 31 de Dic. de 2011
The usual techniques. Construct your text with sprintf(), or with num2str() and with [] concatenation operations.
text(3,5, sprintf('You sunk my %s!', ShipName))

2 comentarios

Walter Roberson
Walter Roberson el 1 de En. de 2012
%d is for numeric values. Use %s for strings.
It appears you probably want two different lines of text. How do you want the two lines arranged relative to each other? Perhaps
text(14,0.5, {sprintf('Times=%s', name(1,:), sprintf('______%s', name(2,:)}, ...)
except using spaces instead of underscores. On the other hand since you are not using a fixed-sized font, getting the two lines aligned is going to be difficult.
Walter Roberson
Walter Roberson el 1 de En. de 2012
There is no real need to keep doing those symbolic calculations. You do not have anything messy like integration. Your z value can be relatively easily calculated numerically based upon the input values. You can set the calculation up once symbolically and create a numeric function from it using matlabFunction. You can create the inputs to pass to matlabFunction using ndgrid. Possibly you might need to use a bxsfun() or two to handle d and f.

Iniciar sesión para comentar.

Etiquetas

Preguntada:

el 31 de Dic. de 2011

Community Treasure Hunt

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

Start Hunting!

Translated by