В этом примере показано, как построить графики, а затем настроить отображение, чтобы добавить метки или подсветку к узлам и ребрам графика.
Используйте 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