Этот пример показывает, как построить графики, и затем настроить отображение, чтобы добавить метки или подсвечивающий к вершинам графика и ребрам.
Используйте функцию plot
, чтобы построить объекты digraph
и graph
. По умолчанию plot
исследует размер и тип графика, чтобы определить который размещение использовать. Получившееся окно рисунка не содержит отметок деления осей. Однако, если вы задаете (x, y) координаты узлов с XData
, YData
или парами "имя-значение" ZData
, затем фигура включает метки деления осей.
Метки узла включены автоматически в графиках графиков, которые имеют 100 или меньше узлов. Метки узла используют имена узла при наличии; в противном случае метки являются числовыми индексами узла.
Например, создайте график с помощью матрицы смежности бакибола, и затем постройте график с помощью всех опций по умолчанию. Если вы вызываете 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
.
Вместо того, чтобы использовать 2D метод макета по умолчанию, используйте 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'
. Функция 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
обрабатывает большие графики немного по-другому, чтобы поддержать удобочитаемость и производительность. Функция plot
вносит эти корректировки при работе с графиками, которые имеют больше чем 100 узлов:
Методом макета графика по умолчанию всегда является 'subspace'
.
Узлы больше не маркируются автоматически.
Свойство MarkerSize
установлено в 2
. (Меньшие графики имеют размер маркера 4
).
Свойство ArrowSize
ориентированных графов установлено в 4
. (Меньшие ориентированные графы используют размер стрелки 7
).
GraphPlot
| digraph
| graph
| plot