layout

Изменение размещения графического графика

Описание

пример

layout(H) изменяет размещение графического графика H при помощи автоматического выбора метода размещения, основанного на структуре графика. layout функция изменяет XData и YData свойства H.

пример

layout(H,method) опционально задает метод размещения. method можно 'circle', 'force', 'layered', 'subspace', 'force3', или 'subspace3'.

пример

layout(H,method,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, layout(H,'force','Iterations',N) задает количество итераций, используемых при вычислении размещения силы, и layout(H,'layered','Sources',S) использует слоистое размещение с исходными узлами S входит в первый слой.

Примеры

свернуть все

Создайте и постройте график с помощью 'force' размещение.

s = [1 1 1 1 1 6 6 6 6 6];
t = [2 3 4 5 6 7 8 9 10 11];
G = graph(s,t);
h = plot(G,'Layout','force');

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

Измените размещение, чтобы он был по умолчанию plot определяет на основе структуры и свойств графика. Результат такой же, как и при использовании plot(G).

layout(h)

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

Создайте и постройте график с помощью 'layered' размещение.

s = [1 1 1 2 2 3 3 4 5 5 6 7];
t = [2 4 5 3 6 4 7 8 6 8 7 8];
G = graph(s,t);
h = plot(G,'Layout','layered');

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

Измените размещение графика, чтобы использовать 'subspace' способ.

layout(h,'subspace')

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

Создайте и постройте график с помощью 'layered' метод размещения.

s = [1 1 1 2 3 3 3 4 4];
t = [2 4 5 6 2 4 7 8 1];
G = digraph(s,t);
h = plot(G,'Layout','layered');

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

Используйте layout функция для уточнения иерархического размещения путем определения исходных узлов и горизонтальной ориентации.

layout(h,'layered','Direction','right','Sources',[1 4])

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

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

Создайте и постройте график, который имеет 150 узлов, разделенных на многие отключенные компоненты. MATLAB ® помещает компоненты графика в сетку.

s = [1 3 5 7 7 10:100];
t = [2 4 6 8 9 randi([10 100],1,91)];
G = graph(s,t,[],150);
h = plot(G);

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

Обновляйте координаты размещения объекта графика и задайте 'UseGravity' как true так, чтобы компоненты были размещены радиально вокруг источника, с большим пространством, отведенным для больших компонентов.

layout(h,'force','UseGravity',true)

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

Постройте график с помощью 'WeightEffect' Пара "имя-значение", чтобы длина графика краев была пропорциональна их весам.

Создайте и постройте график ориентированного графа с взвешенными кромками.

s = [1 1 1 1 1 2 2 2 3 3 3 3 3];
t = [2 4 5 6 7 3 8 9 10 11 12 13 14];
weights = randi([1 20],1,13);
G = graph(s,t,weights);
p = plot(G,'Layout','force','EdgeLabel',G.Edges.Weight);

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

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

layout(p,'force','WeightEffect','direct')

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

Входные параметры

свернуть все

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

Пример: H = plot(G)

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

ОпцияОписаниеСпецифичные для макета Пары "имя-значение"
'auto' (по умолчанию)

Автоматический выбор метода размещения на основе размера и структуры графика.

'circle'

Круговое размещение. Размещение узлов графика на окружности с центром в источник с радиусом 1.

'Center' - Центральный узел в круговом размещении

'force'

Ориентированный на силу размещение [1]. Использует силы притяжения между смежными узлами и силы отталкивания между удаленными узлами.

'Iterations' - Количество направленных на силу итераций размещения

'WeightEffect' - Эффект весов кромок на размещение

'UseGravity' - Переключатель силы тяжести для размещений с несколькими компонентами

'XStart' - Starting x -cordinates для узлов

'YStart' - Starting y -cordinates для узлов

'layered'

Слоистое размещение [2], [3], [4]. Помещает узлы графика в набор слоев, раскрывая иерархическую структуру. По умолчанию слои прогрессируют вниз (стрелы направленного ациклического графика точки вниз).

'Direction' - Направление слоев

'Sources' - Узлы для включения в первый слой

'Sinks' - Узлы, включаемые в последний слой

'AssignLayers' - Метод назначения слоев

'subspace'

Вложение подпространства размещения [5]. Строит графики графика узлов в высокомерном вложенном подпространстве, а затем проецирует положения назад в 2-D. По умолчанию размерность подпространства либо 100, либо общее число узлов, в зависимости от того, что меньше.

'Dimension' - Размерность встроенного подпространства

'force3'3-D ориентированную на силу размещение.

'Iterations' - Количество направленных на силу итераций размещения

'WeightEffect' - Эффект весов кромок на размещение

'UseGravity' - Переключатель силы тяжести для размещений с несколькими компонентами

'XStart' - Starting x -cordinates для узлов

'YStart' - Starting y -cordinates для узлов

'ZStart' - Starting z -cordinates для узлов

'subspace3'3-D вложенные размещения подпространства.

'Dimension' - Размерность встроенного подпространства

Пример: layout(H,'layered')

Пример: layout(H,'force3','Iterations',10)

Пример: layout(H,'subspace','Dimension',50)

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: layout(H,'subspace','Dimension',200)
Сила

свернуть все

Количество направленных на силу итераций размещения, заданное как разделенная разделенными запятой парами, состоящая из 'Iterations' и положительное скалярное целое число.

Эта опция доступна только при method является 'force' или 'force3'.

Пример: layout(H,'force','Iterations',250)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Эффект весов кромок на размещение, заданное как разделенная разделенными запятой парами, состоящая из 'WeightEffect' и одно из значений в этой таблице. Если между двумя узлами существует несколько ребер (как в ориентированном графе с ребром в каждом направлении или мультиграфике), то веса суммируются перед вычислением 'WeightEffect'.

Эта опция доступна только при method является 'force' или 'force3'.

Значение

Описание

'none' (по умолчанию)

Веса кромок не влияют на размещение.

'direct'

Длина ребра пропорциональна весу ребра, G.Edges.Weight. Большие веса кромок дают большие ребра.

'inverse'

Длина ребра обратно пропорциональна весу ребра, 1./G.Edges.Weight. Большие веса кромок дают более короткие ребра.

Пример: layout(H,'force','WeightEffect','inverse')

Гравитация для размещений с несколькими компонентами, заданная как разделенная разделенными запятой парами, состоящая из 'UseGravity' и любой из них 'off', 'on', true, или false. Значение 'on' эквивалентно true, и 'off' эквивалентно false.

По умолчанию MATLAB® раскладывает графики с несколькими компонентами на сетке. Сетка может затенять детали больших компонентов, так как им предоставляется такое же пространство, как и меньшим компонентам. С 'UseGravity' установлено на 'on' или trueВместо этого несколько компонентов раскладываются радиально вокруг источника. Это размещение распределяет компоненты более естественным способом и предоставляет больше пространства для больших компонентов.

Эта опция доступна только при method является 'force' или 'force3'.

Пример: layout(H,'force','UseGravity',true)

Типы данных: char | logical

Запуск x-координат для узлов, заданный как разделенная разделенными запятой парами, состоящая из 'XStart' и вектор координат узла. Используйте эту опцию вместе с 'YStart' для задания 2-D начальных координат (или с 'YStart' и 'ZStart' задать 3-D стартовые координаты) перед итерациями направленного на силу алгоритма изменить положения узлов.

Эта опция доступна только при method является 'force' или 'force3'.

Пример: layout(H,'force','XStart',x,'YStart',y)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Запуск y-координат для узлов, заданный как разделенная разделенными запятой парами, состоящая из 'YStart' и вектор координат узла. Используйте эту опцию вместе с 'XStart' для задания 2-D начальных координат (или с 'XStart' и 'ZStart' задать 3-D стартовые координаты) перед итерациями направленного на силу алгоритма изменить положения узлов.

Эта опция доступна только при method является 'force' или 'force3'.

Пример: layout(H,'force','XStart',x,'YStart',y)

Пример: layout(H,'force','XStart',x,'YStart',y,'ZStart',z)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Запуск z-координат для узлов, заданный как разделенная разделенными запятой парами, состоящая из 'ZStart' и вектор координат узла. Используйте эту опцию вместе с 'XStart' и 'YStart' для задания начальных x, y и z координат узла перед итерациями направленного на силу алгоритма изменяют положения узла.

Эта опция доступна только при method является 'force3'.

Пример: layout(H,'force','XStart',x,'YStart',y,'ZStart',z)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Слоистый

свернуть все

Направление слоев, заданное как разделенная разделенными запятой парами, состоящая из 'Direction' и любой из них 'down', 'up', 'left' или 'right'. Для ориентированных ациклических (ДАГ) графиков стрелы указывают в указанном направлении.

Эта опция доступна только при method является 'layered'.

Пример: layout(H,'layered','Direction','up')

Узлы для включения в первый слой, заданные как разделенная разделенными запятой парами, состоящая из 'Sources' и один или несколько индексов узлов или имен узлов.

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

ФормаОдин узелНесколько узлов
Индекс узла

Скаляр

Пример: 1

Вектор

Пример: [1 2 3]

Имя узла

Вектор символов

Пример: 'A'

Массив ячеек из символьных векторов

Пример: {'A' 'B' 'C'}

Строковый скаляр

Пример: "A"

Строковые массивы

Пример: ["A" "B" "C"]

Эта опция доступна только при method является 'layered'.

Пример: layout(H,'layered','Sources',[1 3 5])

Узлы для включения в последний слой, заданные как разделенная разделенными запятой парами, состоящая из 'Sinks' и один или несколько индексов узлов или имен узлов.

Эта опция доступна только при method является 'layered'.

Пример: layout(H,'layered','Sinks',[2 4 6])

Метод назначения слоя, заданный как разделенная разделенными запятой парами, состоящая из 'AssignLayers' и один из опций в этой таблице.

ОпцияОписание
'auto' (по умолчанию)При назначении узла используется либо 'asap' или 'alap', что бы ни было компактнее.
'asap'Как можно скорее. Каждый узел назначается первому возможному слою, учитывая ограничение, что все его предшественники должны быть в более ранних слоях.
'alap'Как можно поздно. Каждый узел назначается последнему возможному слою, учитывая ограничение, что все его преемники должны быть в более поздних слоях.

Эта опция доступна только при method является 'layered'.

Пример: layout(H,'layered','AssignLayers','alap')

Подпространство

свернуть все

Размерность встроенного подпространства, заданная как разделенная разделенными запятой парами, состоящая из 'Dimension' и положительное скалярное целое число.

  • Целое значение по умолчанию min([100, numnodes(G)]).

  • Для 'subspace' размещение, целое число должно быть больше или равным 2.

  • Для 'subspace3' размещение, целое число должно быть больше или равным 3.

  • В обоих случаях целое число должно быть меньше числом узлов.

Эта опция доступна только при method является 'subspace' или 'subspace3'.

Пример: layout(H,'subspace','Dimension',d)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Круг

свернуть все

Центральный узел в круговом размещении, заданный как разделенная разделенными запятой парами, состоящая из 'Center' и одно из значений в этой таблице.

ЗначениеПример
Скалярный индекс узла1
Имя узла вектора символов'A'
Строковое скалярное имя узла"A"

Эта опция доступна только при method является 'circle'.

Пример: layout(H,'circle','Center',3) размещает узел три в центре.

Пример: layout(H,'circle','Center','Node1') помещает узел с именем 'Node1' в центре.

Совет

  • Используйте Layout Пара "имя-значение", чтобы изменить размещение графа при построении графика. Для примера, plot(G,'Layout','circle') строит график G с круговым размещением.

  • При использовании 'force' или 'force3' методы размещения, лучшая практика - использовать больше итераций с алгоритмом вместо использования XStart, YStart, и ZStart чтобы перезапустить алгоритм с использованием предыдущих выходов. Результат выполнения алгоритма с 100 итерациями отличается по сравнению с выполнением 50 итераций, а затем перезапуском алгоритма из конечных положений, чтобы выполнить еще 50 итераций.

Ссылки

[1] Fruchterman, T., and E. Reingold,. «Чертеж графика по направленному на силу размещению». Программное обеспечение - Практика и опыт. Том 21 (11), 1991, стр. 1129-1164.

[2] Gansner, E., E. Koutsofios, S. North, and K.-P Vo. «A Метода for Drawing Ориентированных графов». Транзакции IEEE по проектированию программного обеспечения. Vol.19, 1993, стр 214–230.

[3] Barth, W., M. Juenger, and P. Mutzel. Простой и эффективный перекрестный подсчет двоичных компонентов. Журнал алгоритмов и приложений графика. Vol.8 (2), 2004, стр 179–194.

[4] Brandes, U., and B. Koepf. «Быстрое и простое горизонтальное назначение координат». LNCS. Том 2265, 2002, стр. 31-44.

[5] Ю. Корен. Рисунок графиков по собственным векторам: теория и практика. Компьютеры и математика с приложениями. Том 49, 2005, с. 1867-1888.

Введенный в R2015b