размещение

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

Синтаксис

layout(H)
layout(H,method)
layout(H,method,Name,Value)

Описание

пример

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');

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

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

'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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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' и 'on', 'off', true или 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"

StringArray

Пример: ["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