File Exchange

image thumbnail

TextZoomable(x,y,va​rargin)

version 2.0.0.0 (8.52 KB) by Ken Purchase
Text that zooms as you zoom your plot, rather than staying at a fixed font size.

7 Downloads

Updated 14 Jul 2015

View Version History

View License

Editor's Note: This file was selected as MATLAB Central Pick of the Week

Text that zooms as you zoom your plot, rather than staying at a fixed font size. Adds text to a figure just like the text() command, except that this text grows/shrinks with figure scaling and zooming, unlike normal text that stays at a fixed font size during figure operations. Note it scales with figure height - for best scaling use 'axis equal' before setting up the text. Now revised to work with R2014b and still be backward compatible.

Cite As

Ken Purchase (2021). TextZoomable(x,y,varargin) (https://www.mathworks.com/matlabcentral/fileexchange/41513-textzoomable-x-y-varargin), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (16)

Ulises Nunez Garzon

Ulises Nunez Garzon

RE: Great idea, and I'm sure it works great for regular plots, but it zooms in too much when calling when the current axes are a subplot.
I figured out why it wasn't working. Can I please have the MATLAB Central administrator delete this and the previous comment?

https://www.mathworks.com/matlabcentral/answers/350695-how-can-i-delete-a-comment-on-a-submission-on-file-exchange

John Schrum

Ken Purchase

Hi Matt J - thanks for letting me know. I have tried to update it - let me know if you have issues. It should now work on all versions of Matlab, but see my comments in the header of the file for a known bug.

Matt J

Hi Ken,

Unfortunately something appears to have malfunctioned with your Jan 27, 2015 update. The latest file appears to be the same as the original.

Ken Purchase

Revised, with many thanks to the Matlab User
Community, including Matt J, Hoi Wong, Philip Caplan.

Hoi Wong

TMW's support really go the extra mile helping its customers. With the help of Philip Caplan, the last bit of the puzzle to get this to work on R2014b's new graphic system is solved.

Replace:
hgp = findpackage('hg');
axesC = findclass(hgp,'axes');
LimListener = handle.listener(imAxes,[axesC.findprop('XLim') axesC.findprop('YLim')],...
'PropertyPostSet',@localLimitListener);

With:
LimListener = addlistener(imAxes,{'XLim','YLim'},'PostSet',@localLimitListener);

Matt J

@David,
I believe the particular error you mention is fixable by changing that line as follows

PostPositionListener = addlistener(hFig,'SizeChanged',...
@(o,e) localPostPositionListener(o,e,imAxes) );

See also the following thread in MATLAB Answers,

<http://www.mathworks.com/matlabcentral/answers/163280-addlistener-syntax-not-recognized-in-r2014b>

However, I'm afraid that even after fixing that, I am finding further problems running TextZoomable in R2014b. In particular, the following lines use undocumented functions findpackage and findclass,

hgp = findpackage('hg');
axesC = findclass(hgp,'axes');

whose behavior has changed somehow.

David

I'm trying to use your code with R2014b and I get this error:
No method 'addlistener' with matching signature found for class 'matlab.ui.Figure'.

I've run the script provided by Mathworks to update code for the new graphics system and it changed one line, but it still doesn't work. Any ideas?

Matt J

Here's a better version of the DeleteFcn,

function DeleteMethod(src,event)
% when called, rescale all fonts in image
hAx=gca;
hFig = get(hAx,'Parent');
ud=get(hAx, 'UserData');
idx=(ud.handles==src);

ud.ratios(idx)=[];
ud.handles(idx)=[];



if isempty(ud.handles)
setappdata(hFig,'KenAxeResizeListeners',[]);
set(hAx, 'UserData',[]);
else
set(hAx, 'UserData',ud);
end

delete(src);

end

Matt J

Ken,

There seems to be a duplicate of this submission at

http://www.mathworks.com/matlabcentral/fileexchange/41501-textzoomable-for-text-that-scales-as-you-zoom

Which is the most official/current version? Also, when I do a very high zoom on the text, parts of the text appear outside the axes. Is there a way to prevent this, i.e., so that only text within the window of the axes is visible?

Matt J

I get the same errors/warnings as Nispio, but setting txtHandle's DeleteFcn callback to the following seems to fix it.

function DeleteMethod(src,event)
% when called, rescale all fonts in image
hAxes=gca;
hFig = get(hAxes,'Parent');
setappdata(hFig,'KenAxeResizeListeners',[]);
set(hAxes, 'UserData',[]);
delete(src);
end

Nispio

This gives the following warnings/errors whenever I try to plot over the top of my old plot.

Warning: Error occurred while evaluating listener callback.
> In axis>LocSetTight1 at 332
In axis>LocSetTight at 277
In axis>LocSetImage at 414
In axis at 135
In showimage at 5
Attempt to reference field of non-structure array.

Error in TextZoomable>getBestFontSize (line 70)
fs = round(ud.ratios * hFigFactor / axHeight);

Error in TextZoomable>localLimitListener (line 106)
fs = getBestFontSize(imAxes);

Nispio

Krishnakumar

Simon

MATLAB Release Compatibility
Created with R2013a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

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

Start Hunting!