Этот пример показывает, как добавить и настроить метки на вершинах графика и краях.
Создайте график, представляющий улицы с координатной сеткой и пересечения в городе. Добавьте веса к краям так, чтобы основные проспекты и перекрестные улицы появились по-другому в графике. Постройте график графика с граничными ширинами строки, пропорциональными весу края.
s = [1 1 2 2 3 4 4 5 5 6 7 7 8 8 9 10 11];
t = [2 4 3 5 6 5 7 6 8 9 8 10 9 11 12 11 12];
weights = [1 5 1 5 5 1 5 1 5 5 1 5 1 5 5 1 1];
G = graph(s,t,weights);
P = plot(G,'LineWidth',G.Edges.Weight);
Для графиков с 100 или меньшим количеством узлов MATLAB® автоматически маркирует узлы с помощью числовых индексов узла, или имена узла (большие графики не используют эти метки по умолчанию). Однако можно изменить метки узла путем корректировки свойства NodeLabel объекта GraphPlot P или при помощи функции labelnode. Поэтому, даже если узлы имеют имена, можно использовать метки, которые отличаются от имен.
Удалите числовые метки узла по умолчанию. Маркируйте одно из пересечений как Home и другой как Work.
labelnode(P,1:12,'') labelnode(P,5,'Home') labelnode(P,12,'Work')

Края в построенной диаграмме не маркированы автоматически. Можно добавить граничные метки путем изменения значения свойства EdgeLabel объекта GraphPlot P или при помощи функции labeledge.
Добавьте граничные метки для улиц в Нью-Йорке. Порядок краев задан в таблице G.Edges графика, таким образом, порядок меток, которые вы задаете, должен уважать тот порядок. Удобно сохранить граничные метки непосредственно в таблице G.Edges, так, чтобы граничное имя жило прямо рядом с другой информацией о крае.
G.Edges
ans=17×2 table
EndNodes Weight
________ ______
1 2 1
1 4 5
2 3 1
2 5 5
3 6 5
4 5 1
4 7 5
5 6 1
5 8 5
6 9 5
7 8 1
7 10 5
8 9 1
8 11 5
9 12 5
10 11 1
⋮
Этот пример имеет 17 краев, но только 7 уникальных названий улицы. Поэтому это целесообразно задавать названия улицы в массиве ячеек и затем индексировать в массив ячеек, чтобы получить желаемое название улицы для каждого края. Добавьте переменную к таблице G.Edges, содержащей названия улицы.
streets = {'8th Ave' '7th Ave' '6th Ave' '5th Ave' 'W 20th St' 'W 21st St' 'W 22nd St'}';
inds = [1 5 1 6 7 2 5 2 6 7 3 5 3 6 7 4 4];
G.Edges.StreetName = streets(inds);
G.Edgesans=17×3 table
EndNodes Weight StreetName
________ ______ ___________
1 2 1 '8th Ave'
1 4 5 'W 20th St'
2 3 1 '8th Ave'
2 5 5 'W 21st St'
3 6 5 'W 22nd St'
4 5 1 '7th Ave'
4 7 5 'W 20th St'
5 6 1 '7th Ave'
5 8 5 'W 21st St'
6 9 5 'W 22nd St'
7 8 1 '6th Ave'
7 10 5 'W 20th St'
8 9 1 '6th Ave'
8 11 5 'W 21st St'
9 12 5 'W 22nd St'
10 11 1 '5th Ave'
⋮
Обновите свойство EdgeLabel сослаться на эти названия улицы.
P.EdgeLabel = G.Edges.StreetName;

Узел и граничные метки в графике графика имеют их собственные свойства, которые управляют внешним видом и стилем меток. Поскольку свойства разъединяются, можно использовать различные стили для меток узла и граничных меток.
Для меток Узла можно настроить:
'NodeLabel'
NodeLabelColor
NodeFontName
NodeFontSize
NodeFontWeight
NodeFontAngle
Для Граничных меток можно настроить:
'EdgeLabel'
EdgeLabelColor
EdgeFontName
EdgeFontSize
EdgeFontWeight
EdgeFontAngle
Используйте эти свойства настроить шрифты в этом примере с улицами Нью-Йорка:
Измените NodeFontSize и NodeLabelColor так, чтобы перекрестные метки были шрифтом на 12 ПБ и красный.
Измените EdgeFontWeight, EdgeFontAngle и EdgeFontSize, чтобы использовать больший, полужирный шрифт для улиц в одном направлении и меньшем, курсивном шрифте для улиц в другом направлении.
Измените EdgeFontName, чтобы использовать Times New Roman для граничных меток.
Можно использовать функцию highlight, чтобы изменить свойства графика подмножества краев графика. Создайте логический индекс isAvenue, который является true для граничных меток, содержащих слово 'Ave'. Используя этот логический вектор как входной параметр к highlight, маркируйте все проспекты одним способом и все непроспекты иначе.
P.NodeFontSize = 12; P.NodeLabelColor = 'r'; isAvenue = contains(P.EdgeLabel, 'Ave'); highlight(P, 'Edges', isAvenue, 'EdgeFontAngle', 'italic', 'EdgeFontSize', 7); highlight(P, 'Edges', ~isAvenue, 'EdgeFontWeight', 'bold', 'EdgeFontSize', 10); P.EdgeFontName = 'Times New Roman';

Найдите кратчайший путь между Домом и узлами работы и исследуйте, какие улицы находятся на пути. Подсветите узлы и края на пути красного цвета и удалите граничные метки для всех краев, которые не находятся на пути.
[path,d,pathEdges] = shortestpath(G,5,12)
path = 1×4
5 6 9 12
d = 11
pathEdges = 1×3
8 10 15
G.Edges.StreetName(pathEdges,:)
ans = 3x1 cell array
{'7th Ave' }
{'W 22nd St'}
{'W 22nd St'}
highlight(P,'Edges',pathEdges,'EdgeColor','r') highlight(P,path,'NodeColor','r') labeledge(P, setdiff(1:numedges(G), pathEdges), '')
