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