exponenta event banner

расположение

Изменение компоновки графика

Описание

пример

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' - Начало координат X для узлов

'YStart' - Запуск координат Y для узлов

'layered'

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

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

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

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

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

'subspace'

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

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

'force3'3-D силовая компоновка.

'Iterations' - Количество итераций компоновки, направленных силами

'WeightEffect' - Влияние веса кромок на компоновку

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

'XStart' - Начало координат X для узлов

'YStart' - Запуск координат Y для узлов

'ZStart' - Начало координат Z для узлов

'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'. Для ориентированных ациклических (DAG) графов стрелки указывают в указанном направлении.

Эта опция доступна только в том случае, если 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) размещает узел 3 в центре.

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

Совет

  • Используйте Layout пара «имя-значение» для изменения компоновки графика при его печати. Например, plot(G,'Layout','circle') строит график G с круговой компоновкой.

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

Ссылки

[1] Фрухтерман, Т. и Э. Рейнгольд,. «Рисование графика с помощью принудительного размещения». Программное обеспечение - практика и опыт. т. 21 (11), 1991, с. 1129-1164.

[2] Ганснер, Э., Э. Коутсофиос, С. Норт и К.-П. Во. «Методика рисования направленных графиков». Транзакции IEEE по программному обеспечению. Vol.19, 1993, стр 214–230.

[3] Барт, В., М. Юэнджер и П. Мутцель. «Простой и эффективный двухслойный перекрестный подсчет». Журнал алгоритмов и приложений графов. Vol.8 (2), 2004, стр 179–194.

[4] Брандес, У. и Б. Коепф. «Быстрое и простое назначение горизонтальных координат». LNCS. Том 2265, 2002, стр. 31-44.

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

Представлен в R2015b