В этом примере показано, как построить графики, и затем настроить отображение, чтобы добавить метки или подсвечивающий к вершинам графика и ребрам.
Используйте plot
функционируйте, чтобы построить graph
и digraph
объекты. По умолчанию, 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: [0.1033 1.3374 2.2460 1.3509 0.0019 -1.0591 -2.2901 ... ] YData: [-1.8039 -1.2709 -2.0484 -3.0776 -2.9916 -0.9642 -1.2170 ... ] ZData: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... ] 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: [3.5040 3.5417 3.5684 3.5799 3.5791 3.0286 3.0574 3.0811 ... ] YData: [2.5225 2.1251 1.6498 1.1759 0.7827 2.5017 2.0929 1.6027 ... ] ZData: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... ] 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
).
graph
| digraph
| plot
| GraphPlot