layout

Измените размещение графика графика

Описание

пример

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

пример

layout(H,method) опционально задает метод макета. method может быть 'circle'СилаМногоуровневыйПодпространство, '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');

Измените размещение, чтобы быть значением по умолчанию что 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')

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

свернуть все

Введите график графика в виде 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]. Строит вершины графика в высоко-размерном встроенном подпространстве, и затем проектирует положения назад в 2D. По умолчанию размерность подпространства или 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'onTRUE, или false. Значение 'on' эквивалентно true, и 'off' эквивалентно false.

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

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

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

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

Стартовые x-координаты для узлов в виде разделенной запятой пары, состоящей из 'XStart' и вектор из координат узла. Используйте эту опцию вместе с 'YStart' задавать 2D стартовые координаты (или с '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' задавать 2D стартовые координаты (или с '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) узел мест три в центре.

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

Советы

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

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

Ссылки

[1] Фрачтермен, T. и Э. Рейнголд. “Рисунок графика Направленным на силу Размещением”. Программное обеспечение — Practice & Experience. Издание 21 (11), 1991, стр 1129–1164.

[2] Gansner, E., Э. Коутсофайос, S. Север и K.-P Vo. “Метод для Рисования Ориентированных графов”. Транзакции IEEE на Разработке программного обеспечения. Vol.19, 1993, стр 214–230.

[3] Барт, W., М. Джуенджер и П. Муцель. “Простой и Эффективный Перекрестный подсчет Двойного слоя”. Журнал Алгоритмов Графика и Приложений. Vol.8 (2), 2004, стр 179–194.

[4] Brandes, U. и Б. Коепф. “Быстрое и Простое Присвоение Горизонтальной координаты”. LNCS. Издание 2265, 2002, стр 31–44.

[5] И. Корен. “Чертя Графики Собственными векторами: Теория и Практика”. Компьютеры и Математика с Приложениями. Издание 49, 2005, стр 1867–1888.

Введенный в R2015b