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

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

Графические объекты построения графиков

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

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

Например, создайте график с помощью матрицы смежности buckyball, а затем постройте график с помощью всех опций по умолчанию. Если вы звоните 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 объект.

Вместо использования метода размещения 2-D по умолчанию используйте 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.

Маркируйте узлы и ребра

Использование labeledge чтобы пометить ребра, ширина которых больше 6 с меткой, 'Large'. The 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 рассматривает большие графики немного по-разному, чтобы поддерживать читаемость и эффективность. The plot функция вносит эти корректировки при работе с графиками, которые имеют более 100 узлов:

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

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

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

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

См. также

| | |

Похожие темы