В этом примере показано, как построить графики, а затем настроить отображение, чтобы добавить метки или подсветку к узлам и ребрам графика.
Используйте plot функция для построения графика graph и digraph объекты. По умолчанию plot исследует размер и тип графика, чтобы определить, какое размещение использовать. Получившееся окно рисунка не содержит отметок деления осей. Однако, если вы задаете (x, y) координаты узлов с XData, YData, или ZData Пары "имя-значение" фигура включает в себя оси тактов.
Метки узлов автоматически включаются в графики, которые имеют 100 или менее узлов. Метки узлов используют имена узлов, если они доступны; в противном случае метки являются числовыми индексами узлов.
Например, создайте график с помощью матрицы смежности buckyball, а затем постройте график с помощью всех опций по умолчанию. Если вы звоните plot и задайте выходной аргумент, затем функция возвращает указатель в GraphPlot объект. Впоследствии можно использовать этот объект для корректировки свойств графика. Например, можно изменить цвет или стиль ребер, размер и цвет узлов и так далее.
G = graph(bucky); p = plot(G)

p =
GraphPlot with properties:
NodeColor: [0 0.4470 0.7410]
MarkerSize: 4
Marker: 'o'
EdgeColor: [0 0.4470 0.7410]
LineWidth: 0.5000
LineStyle: '-'
NodeLabel: {1x60 cell}
EdgeLabel: {}
XData: [1x60 double]
YData: [1x60 double]
ZData: [1x60 double]
Show all properties
После того, как вы получите указатель на GraphPlot объект, используйте индексацию точек для доступа или изменения значений свойств. Полный список свойств, которые можно настроить, см. в разделе Свойства GraphPlot.
Измените значение NodeColor на 'red'.
p.NodeColor = 'red';
Определите ширину линии ребер.
p.LineWidth
ans = 0.5000
Создайте и постройте график, представляющий L-образную мембрану, созданную из квадратной сетки со стороной 12 узлов. Задайте выходной аргумент с plot для возврата указателя на GraphPlot объект.
n = 12; A = delsq(numgrid('L',n)); G = graph(A,'omitselfloops')
G =
graph with properties:
Edges: [130x2 table]
Nodes: [75x0 table]
p = plot(G)

p =
GraphPlot with properties:
NodeColor: [0 0.4470 0.7410]
MarkerSize: 4
Marker: 'o'
EdgeColor: [0 0.4470 0.7410]
LineWidth: 0.5000
LineStyle: '-'
NodeLabel: {1x75 cell}
EdgeLabel: {}
XData: [1x75 double]
YData: [1x75 double]
ZData: [1x75 double]
Show all properties
Используйте layout функция для изменения размещения узлов графа на графике. Различные опции размещения автоматически вычисляют координаты узла для графика. Кроме того, можно задать свои собственные координаты узла с XData, YData, и ZData свойства GraphPlot объект.
Вместо использования метода размещения 2-D по умолчанию используйте layout для задания 'force3' размещение, которая является 3-D направленной на усилие размещением.
layout(p,'force3')
view(3)
Окрашивайте узлы графика в зависимости от их степени. В этом графике все внутренние узлы имеют одинаковую максимальную степень 4, узлы вдоль контура графика имеют степень 3, а угловые узлы имеют наименьшую степень 2. Сохраните эти данные окрашивания узла как переменную NodeColors в G.Nodes.
G.Nodes.NodeColors = degree(G); p.NodeCData = G.Nodes.NodeColors; colorbar

Добавьте некоторые случайные целочисленные веса к ребрам графа, а затем постройте график ребер так, чтобы их ширина линии была пропорционально их весу. Поскольку ширина ребра, приблизительно, больше 7, начинает становиться громоздкой, масштабируйте ширины линии так, чтобы ребро с наибольшим весом имело ширину линии 7. Сохраните эти данные ширины ребра как переменную LWidths в G.Edges.
G.Edges.Weight = randi([10 250],130,1); G.Edges.LWidths = 7*G.Edges.Weight/max(G.Edges.Weight); p.LineWidth = G.Edges.LWidths;

Извлечение и построение графика в правом верхнем углу G как подграфик, чтобы облегчить чтение деталей на графике. Новый график, H, наследует NodeColors и LWidths переменные из G, так что воссоздание предыдущих индивидуальных настроек графика является простым. Однако узлы в H перенумерованы для учета новых чисел узлов в график.
H = subgraph(G,[1:31 36:41]); p1 = plot(H,'NodeCData',H.Nodes.NodeColors,'LineWidth',H.Edges.LWidths); colorbar

Использование labeledge чтобы пометить ребра, ширина которых больше 6 с меткой, 'Large'. The labelnode функция работает аналогичным образом для узлов маркировки.
labeledge(p1,find(H.Edges.LWidths > 6),'Large')
Найдите кратчайший путь между узлом 11 и узлом 37 в подграфике, H. Выделите ребра вдоль этого пути красным цветом и увеличьте размер конечных узлов на пути.
path = shortestpath(H,11,37)
path = 1×10
11 12 17 18 19 24 25 30 36 37
highlight(p1,[11 37]) highlight(p1,path,'EdgeColor','r')

Удалите метки узлов и шкалу палитры сделайте все узлы черными.
p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black';
Найдите другой кратчайший путь, который игнорирует веса кромок. Выделите этот путь зеленым цветом.
path2 = shortestpath(H,11,37,'Method','unweighted')
path2 = 1×10
11 12 13 14 15 20 25 30 31 37
highlight(p1,path2,'EdgeColor','g')

Обычно создаются графики, которые имеют сотни тысяч, или даже миллионы, узлов и/или ребер. По этой причине plot рассматривает большие графики немного по-разному, чтобы поддерживать читаемость и эффективность. The plot функция вносит эти корректировки при работе с графиками, которые имеют более 100 узлов:
Метод размещения графика по умолчанию всегда 'subspace'.
Узлы больше не маркируются автоматически.
The MarkerSize для свойства задано значение 2. (Меньшие графики имеют размер маркера 4).
The ArrowSize свойство ориентированных графов установлено в 4. (Меньшие ориентированные графы используют размер стрелы 7).
digraph | graph | GraphPlot | plot