exponenta event banner

Графическая печать и адаптация

В этом примере показано, как строить графики, а затем настраивать отображение для добавления меток или подсветки к узлам и ребрам графика.

Графическая печать объектов

Используйте plot функция для построения графика graph и digraph объекты. По умолчанию plot проверяет размер и тип графика, чтобы определить, какой макет использовать. Полученное окно фигуры не содержит засечек осей. Однако если указать координаты (x, y) узлов с помощью XData, YData, или ZData пары имя-значение, то рисунок включает оси засечки.

Метки узлов автоматически включаются в графики графиков, имеющих не более 100 узлов. В метках узлов используются имена узлов, если они доступны; в противном случае метки являются числовыми индексами узлов.

Например, создайте график, используя матрицу смежности buckyball, а затем постройте график, используя все опции по умолчанию. При звонке plot и укажите выходной аргумент, затем функция возвращает дескриптор GraphPlot объект. Впоследствии этот объект можно использовать для настройки свойств графика. Например, можно изменить цвет или стиль ребер, размер и цвет узлов и т. д.

G = graph(bucky);
p = plot(G)

Figure contains an axes. The axes contains an object of type graphplot.

p = 
  GraphPlot with properties:

     NodeColor: [0 0.4470 0.7410]
    MarkerSize: 4
        Marker: 'o'
     EdgeColor: [0 0.4470 0.7410]
     LineWidth: 0.5000
     LineStyle: '-'
     NodeLabel: {1x60 cell}
     EdgeLabel: {}
         XData: [1x60 double]
         YData: [1x60 double]
         ZData: [1x60 double]

  Show all properties

После того, как у вас есть ручка GraphPlot используйте индексирование точек для доступа или изменения значений свойств. Полный список свойств, которые можно настроить, см. в разделе Свойства графика (Graph) Печать (Plot Properties).

Изменение значения NodeColor кому 'red'.

p.NodeColor = 'red';

Figure contains an axes. The axes contains an object of type graphplot.

Определите ширину линий кромок.

p.LineWidth
ans = 0.5000

Создание и печать графика

Создайте и постройте график, представляющий L-образную мембрану, построенную из квадратной сетки со стороной 12 узлов. Укажите выходной аргумент с помощью plot для возврата дескриптора к GraphPlot объект.

n = 12;
A = delsq(numgrid('L',n));
G = graph(A,'omitselfloops')
G = 
  graph with properties:

    Edges: [130x2 table]
    Nodes: [75x0 table]

p = plot(G)

Figure contains an axes. The axes contains an object of type graphplot.

p = 
  GraphPlot with properties:

     NodeColor: [0 0.4470 0.7410]
    MarkerSize: 4
        Marker: 'o'
     EdgeColor: [0 0.4470 0.7410]
     LineWidth: 0.5000
     LineStyle: '-'
     NodeLabel: {1x75 cell}
     EdgeLabel: {}
         XData: [1x75 double]
         YData: [1x75 double]
         ZData: [1x75 double]

  Show all properties

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

Используйте layout для изменения компоновки узлов графика на графике. Различные опции компоновки автоматически вычисляют координаты узлов для графика. Кроме того, можно указать собственные координаты узла с помощью XData, YData, и ZData свойства GraphPlot объект.

Вместо использования метода компоновки 2-D по умолчанию layout для указания 'force3' компоновка, которая является компоновкой, направленной на 3-D силу.

layout(p,'force3')
view(3)

Figure contains an axes. The axes contains an object of type graphplot.

Пропорциональная окраска узлов

Окраска узлов графика на основе их степени. На этом графике все внутренние узлы имеют одинаковую максимальную степень 4, узлы вдоль границы графа имеют степень 3, а угловые узлы имеют наименьшую степень 2. Сохранить данные раскраски узла в качестве переменной NodeColors в G.Nodes.

G.Nodes.NodeColors = degree(G);
p.NodeCData = G.Nodes.NodeColors;
colorbar

Figure contains an axes. The axes contains an object of type graphplot.

Ширина линии кромки по весу

Добавьте некоторые случайные целочисленные веса к рёбрам графа, а затем постройте график рёбер таким образом, чтобы их ширина линии была пропорциональна их весу. Поскольку ширина линии кромки, приблизительно превышающая 7, начинает становиться громоздкой, масштабировать ширину линии так, чтобы кромка с наибольшим весом имела ширину линии, равную 7. Сохранить данные о ширине края в качестве переменной LWidths в G.Edges.

G.Edges.Weight = randi([10 250],130,1);
G.Edges.LWidths = 7*G.Edges.Weight/max(G.Edges.Weight);
p.LineWidth = G.Edges.LWidths;

Figure contains an axes. The axes contains an object of type graphplot.

Извлечь подграф

Извлечение и печать верхнего правого угла G как подграф, чтобы облегчить чтение деталей на графике. Новый график, H, наследует NodeColors и LWidths переменные из G, так что воссоздание предыдущих настроек печати является простым. Однако узлы в H перенумерованы, чтобы учесть новое число узлов в графике.

H = subgraph(G,[1:31 36:41]);
p1 = plot(H,'NodeCData',H.Nodes.NodeColors,'LineWidth',H.Edges.LWidths);
colorbar

Figure contains an axes. The axes contains an object of type graphplot.

Маркировка узлов и кромок

Использовать labeledge маркировка кромок, ширина которых больше 6 с этикеткой, 'Large'. labelnode функция работает аналогичным образом для маркировки узлов.

labeledge(p1,find(H.Edges.LWidths > 6),'Large')

Figure contains an axes. The axes contains an object of type graphplot.

Выделить кратчайший путь

Найдите кратчайший путь между узлом 11 и узлом 37 в подграфе, H. Выделите края вдоль этого контура красным цветом и увеличьте размер конечных узлов на контуре.

path = shortestpath(H,11,37)
path = 1×10

    11    12    17    18    19    24    25    30    36    37

highlight(p1,[11 37])
highlight(p1,path,'EdgeColor','r')

Figure contains an axes. The axes contains an object of type graphplot.

Удалите метки узлов и панель цветов и сделайте все узлы черными.

p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black';

Figure contains an axes. The axes contains an object of type graphplot.

Найдите другой кратчайший путь, который игнорирует веса кромок. Выделите этот путь зеленым цветом.

path2 = shortestpath(H,11,37,'Method','unweighted')
path2 = 1×10

    11    12    13    14    15    20    25    30    31    37

highlight(p1,path2,'EdgeColor','g')

Figure contains an axes. The axes contains an object of type graphplot.

Печать больших графиков

Обычно создаются графики с сотнями тысяч или даже миллионами узлов и/или рёбер. По этой причине plot обрабатывает большие графики несколько иначе, чтобы сохранить читаемость и производительность. plot при работе с графиками, имеющими более 100 узлов, функция производит следующие корректировки:

  1. Метод компоновки графика по умолчанию всегда 'subspace'.

  2. Узлы больше не маркируются автоматически.

  3. MarkerSize свойство имеет значение 2. (Меньшие графики имеют размер маркера 4).

  4. ArrowSize свойство направленных графов имеет значение 4. (Меньшие направленные графики используют размер стрелки 7).

См. также

| | |

Связанные темы