Изменение компоновки графика
layout( изменение компоновки графика H)H с помощью метода автоматического выбора компоновки на основе структуры графика. layout функция изменяет XData и YData свойства H.
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');

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

Создание и печать графика с помощью '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');

Изменение компоновки графика для использования 'subspace' способ.
layout(h,'subspace')
Создание и печать графика с помощью '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');

Используйте layout для уточнения иерархического макета путем указания исходных узлов и горизонтальной ориентации.
layout(h,'layered','Direction','right','Sources',[1 4])

Постройте график с несколькими компонентами, а затем покажите, как использовать '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);

Обновите координаты компоновки объекта-графика и укажите 'UseGravity' как true так, чтобы компоненты располагались радиально вокруг начала координат, с большим пространством, отведенным для больших компонентов.
layout(h,'force','UseGravity',true)

Постройте график с помощью '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);

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

method - Способ компоновки'auto' (по умолчанию) | 'circle' | 'force' | 'layered' | 'subspace' | 'force3' | 'subspace3'Метод компоновки, указанный как один из параметров в таблице. В таблице также перечислены совместимые пары имя-значение для дальнейшего уточнения каждого метода компоновки.
| Выбор | Описание | Специфичные для компоновки пары «имя-значение» |
|---|---|---|
'auto' (по умолчанию) |
Автоматический выбор метода компоновки на основе размера и структуры графика. |
— |
'circle' |
Круговая компоновка. Размещение узлов графика на окружности с центром в начале координат с радиусом 1. |
|
'force' |
Силовая компоновка [1]. Использует силы притяжения между соседними узлами и силы отталкивания между удаленными узлами. |
|
'layered' |
Слоистая компоновка [2], [3], [4]. Помещает узлы графа в набор слоев, открывая иерархическую структуру. По умолчанию слои продвигаются вниз (стрелки направленного ациклического графика указывают вниз). |
|
'subspace' |
Компоновка встраивания подпространства [5]. Строит графики узлов графика в высокомерном вложенном подпространстве, а затем проецирует позиции обратно в 2-D. По умолчанию размер подпространства равен 100 или общему числу узлов, в зависимости от того, какое из них меньше. |
|
'force3' | 3-D силовая компоновка. |
|
'subspace3' | 3-D компоновку встраивания подпространства. |
|
Пример: 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' - Количество итераций компоновки, направленных силами100 (по умолчанию) | положительное скалярное целоеЧисло итераций компоновки, направленных силой, указанных как пара, разделенная запятыми, состоящая из 'Iterations' и положительное скалярное целое число.
Эта опция доступна только в том случае, если method является 'force' или 'force3'.
Пример: layout(H,'force','Iterations',250)
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
'WeightEffect' - Влияние веса кромок на компоновку'none' (по умолчанию) | 'direct' | 'inverse'Влияние веса кромки на компоновку, определяемое как разделенная запятыми пара, состоящая из 'WeightEffect' и одно из значений в этой таблице. Если между двумя узлами имеется несколько рёбер (как в направленном графе с ребром в каждом направлении или мультиграфе), то весовые коэффициенты суммируются перед вычислением 'WeightEffect'.
Эта опция доступна только в том случае, если method является 'force' или 'force3'.
|
Стоимость |
Описание |
|---|---|
|
|
Веса кромок не влияют на компоновку. |
|
|
Длина кромки пропорциональна весу кромки, |
|
|
Длина кромки обратно пропорциональна весу кромки, |
Пример: layout(H,'force','WeightEffect','inverse')
'UseGravity' - Переключение силы тяжести для компоновок с несколькими компонентами'off' или false (по умолчанию) | 'on' или trueПереключатель силы тяжести для компоновок с несколькими компонентами, указанный как разделенная запятыми пара, состоящая из 'UseGravity' и либо 'off', 'on', true, или false. Значение 'on' эквивалентно true, и 'off' эквивалентно false.
По умолчанию MATLAB ® размещает графики с несколькими компонентами на сетке. Сетка может скрывать детали более крупных компонентов, поскольку им предоставляется такое же количество пространства, как и более мелким компонентам. С'UseGravity' установить в значение 'on' или trueвместо этого несколько компонентов укладываются радиально вокруг начала координат. Эта компоновка расширяет компоненты более естественным образом и обеспечивает больше пространства для более крупных компонентов.
Эта опция доступна только в том случае, если method является 'force' или 'force3'.
Пример: layout(H,'force','UseGravity',true)
Типы данных: char | logical
'XStart' - Начало координат X для узловНачало координат 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
'YStart' - Запуск координат Y для узловНачало координат 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
'ZStart' - Начало координат Z для узловНачало координат 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'Направление слоев, указанное как разделенная запятыми пара, состоящая из 'Direction' и либо 'down', 'up', 'left' или 'right'. Для ориентированных ациклических (DAG) графов стрелки указывают в указанном направлении.
Эта опция доступна только в том случае, если method является 'layered'.
Пример: layout(H,'layered','Direction','up')
'Sources' - Узлы для включения в первый уровеньУзлы для включения в первый уровень, указанные как разделенная запятыми пара, состоящая из 'Sources' и один или несколько индексов узлов или имен узлов.
В этой таблице показаны различные способы ссылки на один или несколько узлов по их числовым индексам узлов или по их именам.
| Форма | Один узел | Несколько узлов |
|---|---|---|
| Индекс узла | Скаляр Пример: | Вектор Пример: |
| Имя узла | Символьный вектор Пример: | Массив ячеек символьных векторов Пример: |
Строковый скаляр Пример: | Строковый массив Пример: |
Эта опция доступна только в том случае, если method является 'layered'.
Пример: layout(H,'layered','Sources',[1 3 5])
'Sinks' - Узлы для включения в последний уровеньУзлы для включения в последний слой, указанные как разделенная запятыми пара, состоящая из 'Sinks' и один или несколько индексов узлов или имен узлов.
Эта опция доступна только в том случае, если method является 'layered'.
Пример: layout(H,'layered','Sinks',[2 4 6])
'AssignLayers' - Метод назначения слоев'auto' (по умолчанию) | 'asap' | 'alap'Метод назначения слоев, заданный как разделенная запятыми пара, состоящая из 'AssignLayers' и один из вариантов в этой таблице.
| Выбор | Описание |
|---|---|
'auto' (по умолчанию) | Назначение узла использует либо 'asap' или 'alap', в зависимости от того, что является более компактным. |
'asap' | Как можно скорее. Каждый узел назначается первому возможному слою, учитывая ограничение, что все его предшественники должны находиться на более ранних уровнях. |
'alap' | Как можно позже. Каждый узел назначается последнему возможному уровню, учитывая ограничение, что все его последующие узлы должны находиться на более поздних уровнях. |
Эта опция доступна только в том случае, если method является 'layered'.
Пример: layout(H,'layered','AssignLayers','alap')
'Dimension' - Размеры закладного подпространстваРазмер вложенного подпространства, указанного как разделенная запятыми пара, состоящая из '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' - Центральный узел в круговой компоновкеЦентральный узел в круговой компоновке, указанный как разделенная запятыми пара, состоящая из '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.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.