How can I make figure title and annotations selectable?
조회 수: 2(최근 30일)
표시 이전 댓글
채택된 답변
OCDER
2017년 9월 22일
편집: OCDER
2017년 9월 22일
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
end
%Restore the units back to previous units
set(gca, 'units', PrevAxUnit);
set(gcf, 'units', PrevFigUnit);
추가 답변(0개)
참고 항목
범주
Find more on Interactive Control and Callbacks in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!