【问题标题】:MATLAB: creating circular centered text labels for a circular plotMATLAB:为圆形图创建圆形居中文本标签
【发布时间】:2018-12-25 23:20:30
【问题描述】:

这是我第一次在 stackoverflow 上发布内容,如果帖子质量不高,请见谅。

我正在尝试在 MATLAB 中制作一个图形,其中一些相互连接的节点排列成一个圆圈,我想标记每个节点(例如,1 2 3 等)。当我使用此示例代码并注释掉“旋转”(最后一行)时,我得到对齐错误的文本标签。我该怎么做才能让它们与节点图等距放置而无需旋转文本?谢谢大家! (我附上代码生成的图)。

%# 60-by-60 sparse adjacency matrix
A = bucky();
N = length(A);![enter image description here][1]

%# x/y coordinates of nodes in a circular layout
r =  1;
theta = linspace(0,2*pi,N+1)'; theta(end) = [];
xy = r .* [cos(theta) sin(theta)];

%# labels of nodes
txt = cellstr(num2str((1:N)','%02d'));

%# show nodes and edges
figure(123)
line(xy(:,1), xy(:,2), 'LineStyle','none', ...
'Marker','.', 'MarkerSize',15, 'Color','g')
hold on
gplot(A, xy, 'b-')
axis([-1 1 -1 1]); axis equal off
hold off

%# show node labels
h = text(xy(:,1).*1.05, xy(:,2).*1.05, txt, 'FontSize',8);
%set(h, {'Rotation'},num2cell(theta*180/pi))

【问题讨论】:

    标签: matlab plot text placement


    【解决方案1】:

    我认为问题在于您的文本左对齐。你把你的文本框放在圆圈周围的所有点加上一些径向偏移。这会导致您的文本标签偏左对齐。如果您将文本对齐方式更改为居中,这将缓解此问题。

    以下是对您的代码的示例编辑,您可以使用它来实现您想要的。注意,我也稍微增加了径向偏移量。

     %# show node labels
     h = text(xy(:,1).*1.08, xy(:,2).*1.08, txt, 'FontSize',8);
     set(h, {'HorizontalAlignment'},{'center'})
    

    【讨论】:

    • 非常感谢您的回复。正如你所说,我也尝试过,它缓解了问题,但并没有完全解决它。如果我使用径向偏移为 1.01 的代码行,这一点就会变得很明显。或许还有其他建议?
    • 如果您尝试 set(h,{'edgecolor'},{'black'}),您会更深入地了解文本框。将径向乘数设为 1.0,在我看来它相当居中。我不太明白它是如何关闭的。
    • 我猜你是对的:非常感谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多