Графическое изображение графика и индивидуальная настройка

Этот пример показывает, как построить графики, и затем настроить отображение, чтобы добавить метки или подсвечивающий к вершинам графика и ребрам.

Объекты графического изображения графика

Используйте функцию 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

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

Используйте 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 узлов:

  1. Методом макета графика по умолчанию всегда является 'subspace'.

  2. Узлы больше не маркируются автоматически.

  3. Свойство MarkerSize установлено в 2. (Меньшие графики имеют размер маркера 4).

  4. Свойство ArrowSize ориентированных графов установлено в 4. (Меньшие ориентированные графы используют размер стрелки 7).

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

| | |

Похожие темы