exponenta event banner

Узлы и кромки графика меток

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

Создание и печать графика

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

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);

Figure contains an axes. The axes contains an object of type graphplot.

Добавить метки узлов

Для графиков со 100 или менее узлами MATLAB ® автоматически маркирует узлы с помощью числовых индексов узлов или имен узлов (по умолчанию эти метки пропускаются большими графами). Однако можно изменить метки узлов, настроив NodeLabel имущества GraphPlot объект P или с помощью labelnode функция. Поэтому, даже если узлы имеют имена, можно использовать метки, которые отличаются от имен.

Удалите метки числовых узлов по умолчанию. Пометить одно из пересечений как Home и другой как Work.

labelnode(P,1:12,'')
labelnode(P,5,'Home')
labelnode(P,12,'Work')

Figure contains an axes. The axes contains an object of type graphplot.

Добавить метки кромок

Кромки на графике не помечаются автоматически. Можно добавить метки кромок, изменив значение 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;

Figure contains an axes. The axes contains an object of type graphplot.

Настройка свойств шрифта

Метки узлов и кромок на графике графика имеют свои собственные свойства, которые управляют внешним видом и стилем меток. Поскольку свойства разъединены, можно использовать различные стили для меток узлов и меток кромок.

Для меток узлов можно настроить:

  • 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';

Figure contains an axes. The axes contains an object of type graphplot.

Подсветить кромки

Найдите кратчайший путь между домашними и рабочими узлами и проверьте, какие улицы находятся на пути. Выделите узлы и кромки на контуре красным цветом и удалите метки кромок для всех кромок, которые не находятся на контуре.

[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), '')

Figure contains an axes. The axes contains an object of type graphplot.

См. также

Связанные темы