with cycle, changing the content of text
5 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Matt Tearle
on 31 Dec 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')
More Answers (1)
Walter Roberson
on 31 Dec 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 Comments
Walter Roberson
on 1 Jan 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
on 1 Jan 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.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!