6

我想在图表上放一个带圆圈的数字作为靠近(但不在)一个点的标记。听起来很简单,但我也想保持缩放/纵横比变化不变。

由于这个不变量,我不能画一个圆作为线对象(在重新缩放时不重新绘制它);如果我使用圆形标记,我必须在重新缩放时调整它的偏移量。

text()我能想到的最简单的方法是在函数的字符串中使用 Unicode 或 Wingdings 字符①②③等。但是 unicode 似乎无法正常工作,以下示例仅适用于 ① 而不适用于其他数字(产生矩形框):

作品:

clf; text(0.5,0.5,char(129),'FontName','WingDings')

不起作用(应该是带圆圈的 2):

clf; text(0.5,0.5,char(130),'FontName','WingDings')

什么给出了,任何人都可以提出解决方法吗?

4

2 回答 2

8

这似乎对我有用,使用 Matlab 的乳胶解释器,并且\textcircled

clf; text(0.5, 0.5, '$\textcircled{2}$', 'Interpreter', 'latex')

\textcircled命令似乎有一些偏移问题,也许您可​​以尝试改进使用过的 latex 命令并告诉我们:)

例如,按照上面的链接,我得到了更好的结果:

clf; text(0.5, 0.5, '$\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {2}}}$', 'Interpreter', 'latex')

尽管如此,两位数看起来还是很糟糕。

于 2012-05-30T14:43:12.470 回答
7

这是一个示例,其中标记(文本+圆圈)对于缩放/调整大小是不变的:

%# 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)

截屏

与@catchmeifyoutry提出的基于 LaTeX 的解决方案进行比较(注意两位数):

%# 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)

screenshot_latex

于 2012-05-31T16:35:29.460 回答