Порядок таблицы ребер в классе graph
в MATLAB выглядит довольно сильно зависимым от положения в матрице смежности графа, который по своей сути невозможно создать таким образом, который гарантирует некоторый произвольный порядок ребер.Поэтому я думаю, что у вас есть только два варианта:
- Напишите свою собственную процедуру построения графика;затем вы можете управлять порядком построения графиков так, как вам нравится, потому что это ваш собственный программный дизайн.
- Управление выводом графиков в MATLAB с использованием недокументированных примитивов, которые он создает.
Второй вариант возможен с помощьюотмечая, что у построенного GraphPlot
объекта есть LineStrip
объект в его NodeChildren
, который отвечает за рисование всех соответствующих ребер.Поскольку вы используете цветовую карту в градациях серого, данные RGB в этом объекте - это все, что вам нужно, чтобы выяснить, как нужно упорядочить его вершины, чтобы получить правильный порядок построения.
Сначала сохраните полученный результат вP
и установите EdgeAlpha
на 1
, чтобы график строился
таким образом, чтобы более светлые края не изменяли более темные при их пересечении
P = plot(G, 'XData', Xcoords, 'YData', Ycoords, 'NodeLabel',{}, 'MarkerSize', 7,...
'LineWidth', 3.8, 'EdgeCdata', G.Edges.Weight, 'EdgeAlpha',1);
colormap(flipud(gray(40)));
colorbar('southoutside'); caxis([0 1]);
axis off
Затем найдите LineStrip
, созданный в процессе рисования:
drawnow
s = P.NodeChildren(arrayfun(@(o) isa(o,'matlab.graphics.primitive.world.LineStrip'), P.NodeChildren));
Затем можно определить новый порядок вершин в s
из его ColorData
, который затем должен быть примененк свойствам ColorData
и VertexData
, чтобы изменить порядок ребер без каких-либо изменений:
[~,idx] = sortrows(s.ColorData','desc');
set(s, 'VertexData',s.VertexData(:,idx), 'ColorData',s.ColorData(:,idx));
Это может привести к переопределению при любом последующем перерисовке, а отсутствие функциональности без документов не дает никаких изменений.гарантирует, как он будет себя вести, но внешне он, кажется, делает то, что вы ищете.