Here is an example where markers (text + circles) are invariant for scaling / resizing:
%# some graph in 2D [adj,XY] = bucky; N = 30; adj = adj(1:N,1:N); XY = XY(1:N,1:2); %# plot edges [xx yy] = gplot(adj, XY); hFig = figure(); axis equal line(xx, yy, 'LineStyle','-', 'Color','b', 'Marker','s', 'MarkerFaceColor','g') %# draw text near vertices xoff = 0; yoff = 0; %# optional offsets str = strtrim(cellstr(num2str((1:N)'))); hTxt = text(XY(:,1)+xoff, XY(:,2)+yoff, str, ... 'FontSize',12, 'FontWeight','bold', ... 'HorizontalAlign','right', 'VerticalAlign','bottom'); %# draw circles around text e = cell2mat(get(hTxt, {'Extent'})); p = e(:,1:2) + e(:,3:4)./2; hLine = line('XData',p(:,1), 'YData',p(:,2), ... 'LineStyle','none', 'Marker','o', 'MarkerSize',18, ... 'MarkerFaceColor','none', 'MarkerEdgeColor','k'); %# link circles position to text (on zoom and figure resize) callbackFcn = @(o,e) set(hLine, ... 'XData',cellfun(@(x)x(1)+x(3)/2,get(hTxt,{'Extent'})), ... 'YData',cellfun(@(x)x(2)+x(4)/2,get(hTxt,{'Extent'})) ); set(zoom(hFig), 'ActionPostCallback',callbackFcn) set(hFig, 'ResizeFcn',callbackFcn)
Compare with the LaTeX-based solution offered by @catchmeifyoutry (note the double-digit numbers):
%# use LaTeX to draw circled text at vertices %#str = num2str((1:N)', '$\\textcircled{%d}$'); str = num2str((1:N)', '$\\raisebox{.5pt}{\\textcircled{\\raisebox{-.9pt} {%d}}}$'); text(XY(:,1), XY(:,2), str, ... 'HorizontalAlign','right', 'VerticalAlign','bottom', ... 'Interpreter','latex', 'FontSize',18)