MATLAB Answers


How can I make figure title and annotations selectable?

Asked by Pal Szabo on 21 Sep 2017
Latest activity Commented on by OCDER
on 22 Sep 2017
I have a figures which contains annotations with hyperlinks to other figures. I want the viewer of the figure to be able to just select the hyperlink and copy it to clipboard. How can I do this?


Sign in to comment.

1 Answer

Answer by OCDER
on 22 Sep 2017
Edited by OCDER
on 22 Sep 2017
 Accepted Answer

See the example below. It draws a figure, and if you click above the axes area (where the title is), then it will save the title into your clipboard. You have to use some sort of event-handling function (here copyTitle) and associate this function with the figure WindowButtonUpFcn property as shown below.
plot(1:10, 1:10)
title('Copy this title to clipboard')
set(gcf, 'WindowButtonUpFcn', @copyTitle)
This is the event-handling function:
function copyTitle(hObject, eventdata)
%Remember current units, since you want pixels.
%This is not needed if all units are in pixels, but chances are they're not.
PrevAxUnit = get(gca, 'units');
PrevFigUnit = get(gcf, 'units');
set(gca, 'units', 'pixel');
set(gcf, 'units', 'pixel');
%Determine the figure, axes, point, and pointer-relative-to-figure positions.
AxesPos = get(gca, 'position');
FigurePos = get(gcf, 'position');
PointerPos = get(0, 'pointerlocation');
PointerRelPos = PointerPos - FigurePos(1:2); %1,1 is the bottom left of figure
%Here, add more calculations to determine the exact area of annotation area
%For now, assume any area above axes top is the title area.
if PointerRelPos(2) > sum(AxesPos([2 4]))
TitleStr = get(get(gca, 'title'), 'string');
fprintf('Saving the title "%s" into the clipboard.\n', TitleStr);
clipboard('copy', TitleStr);
%Here, add more actions you want when user clicks the title area
%Restore the units back to previous units
set(gca, 'units', PrevAxUnit);
set(gcf, 'units', PrevFigUnit);


Thanks much, it works indeed!
You're welcome!

Sign in to comment.