2014-10-23 2 views
0

это первый раз, когда я отправляю что-то в stackoverflow, поэтому, пожалуйста, извините меня, если сообщение не высшего качества.MATLAB: создание круговых центрированных текстовых меток для кругового графика

Я пытаюсь сделать фигуру в 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)) 

ответ

0

Я думаю, что проблема заключается в том, что ваш текст выровнен слева. Вы помещаете свои текстовые поля во все точки вокруг круга плюс некоторое радиальное смещение. Это приведет к тому, что ваши текстовые метки будут отображаться в центре с выравниванием по левому краю. Если вы измените выравнивание текста в центре, это уменьшит эту проблему.

Ниже приведен пример редактирования вашего кода, который вы можете использовать для достижения желаемого. Заметьте, я тоже немного увеличил радиальное смещение.

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

Большое спасибо за ваш ответ. Я тоже пробовал это, как вы говорите, это смягчает проблему, но не совсем решает ее. Это становится очевидным, если я использую ваши строки кода с радиальным смещением до 1.01. Возможно, есть и другие предложения? – user3895311

+0

Если вы попробуете установить (h, {'edgecolor'}, {'black'}), вы получите больше информации в текстовом поле. С радиальным умножителем до 1,0, он выглядит довольно сосредоточенным для меня. Я не совсем понимаю, как это происходит. –

+0

Я думаю, вы правы: S большое спасибо за вашу помощь! – user3895311