Изменение размещения графического графика
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'
. Для ориентированных ациклических (ДАГ) графиков стрелы указывают в указанном направлении.
Эта опция доступна только при 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)
размещает узел три в центре.
Пример: 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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.