Маркировка Graph Nodes и Edges

В этом примере показано, как добавить и настроить метки на вершинах графика и ребрах.

Создание и Построение графа

Создайте график, представляющий улицы с координатной сеткой и пересечения в городе. Добавьте веса в ребра так, чтобы основные проспекты и перекрестные улицы появились по-другому в графике. Постройте график с ширинами линии ребра, пропорциональными весу ребра.

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.Edges
ans=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
    {'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), '')

Смотрите также

Похожие темы