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

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

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

Используйте plot функционируйте, чтобы построить graph и digraph объекты. По умолчанию, plot исследует размер и тип графика, чтобы определить который размещение использовать. Получившееся окно рисунка не содержит отметок деления осей. Однако, если вы задаете (x, y) координаты узлов с XData, YData, или ZData пары "имя-значение", затем фигура включает метки деления осей.

Метки узла включены автоматически в графиках графиков, которые имеют 100 или меньше узлов. Метки узла используют имена узла при наличии; в противном случае метки являются числовыми индексами узла.

Например, создайте график с помощью матрицы смежности бакибола, и затем постройте график с помощью всех опций по умолчанию. Если вы вызываете plot и задайте выходной аргумент, затем функция возвращает указатель на GraphPlot объект. Впоследствии, можно использовать этот объект настроить свойства графика. Например, можно изменить цвет или стиль ребер, размера и цвета узлов, и так далее.

G = graph(bucky);
p = plot(G)

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

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

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

Определите ширину линии ребер.

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)

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

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)

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

Пропорциональная окраска узла

Окрасьте вершины графика на основе их степени. В этом графике все внутренние узлы имеют ту же максимальную степень 4, узлы вдоль контура графика имеют степень 3, и угловые узлы имеют наименьшую степень 2. Храните эти данные об окраске узла как переменную NodeColors в G.Nodes.

G.Nodes.NodeColors = degree(G);
p.NodeCData = G.Nodes.NodeColors;
colorbar

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

Граничная ширина линии в развес

Добавьте некоторые случайные целочисленные веса в ребра графика, и затем постройте ребра, таким образом, что их ширина линии пропорциональна их весу. Поскольку ширина линии ребра, приблизительно больше, чем 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;

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

Извлечение подграфа

Извлеките и постройте правый верхний угол 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

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

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

Используйте labeledge пометить ребра, ширина которых больше, чем 6 с меткой, 'Large'. labelnode функция работает подобным образом на маркировку узлов.

labeledge(p1,find(H.Edges.LWidths > 6),'Large')

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

Выделение кратчайшего пути

Найдите кратчайший путь между узлом 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')

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

Удалите метки узла и шкалу палитры, и сделайте все узлы черными.

p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black';

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

Найдите различный кратчайший путь, который игнорирует вес ребра. Подсветите этот путь зеленого цвета.

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

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

Графическое изображение больших графиков

Распространено создать графики, которые имеют сотни тысяч, или даже миллионы, узлов и/или ребер. Поэтому plot обрабатывает большие графики немного по-другому, чтобы обеспечить удобочитаемость и эффективность. plot функция вносит эти корректировки при работе с графиками, которые имеют больше чем 100 узлов:

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

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

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

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

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

| | |

Похожие темы