Как назначить один и тот же стиль группе ребер? - PullRequest
22 голосов
/ 28 июня 2010

У меня есть график, который я хочу графизировать для меня и визуализировать.Граф имеет 122 ребра и 123 узла.Края бывают 4 разных видов, и я хочу, чтобы они были визуально различимы.Однако я еще не решил, что будет лучшим способом сделать это, я хотел бы немного поиграть с циферблатами.

К сожалению, я не вижу ничего похожего на атрибут "class" или "stylesheet" для ребер.Я могу только установить визуальные атрибуты индивидуально для каждого края (много повторений).Возможно, я что-то пропустил?Может быть, есть какой-то способ добавить ребра в 4 разные группы и затем стилировать группы, а не каждое ребро по отдельности?

Ответы [ 3 ]

33 голосов
/ 28 июня 2010

Чтобы задать стиль ребер (или узлов) по группе , а не по отдельности, используйте подграф .

вроде так:

digraph G {

node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"];

subgraph c1 {
    edge [color="#004225", arrowsize="0.6", penwidth="1"];
    "node 1" -> "node 3";
    "node 5" -> "node 7";
    "node 1" -> "node 2"; 
    label = "";
}

subgraph c2 {
    edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"];
    "node 2" -> "node 4";
    "node 4" -> "node 6";
    "node 3" -> "node 5";
    "node 6" -> "node 8"; 
    label = "";

}

begin -> "node 1";
start -> "node 2";
"node 1" -> "node 4"
"node 2" -> "node 6";

start [shape=diamond];}

Так что, если вы поместите приведенный выше код в файл с расширением ".dot"; затем визуализируем его в графике, вы увидите три различных типов ребер, с точки зрения внешнего вида.

По умолчанию используется только один тип (цвет = черный, толщина = 1 и т. Д.), Т. Е. Эти ребра не назначены для подграфа.

Другие два типа ребер (тонкая темно-зеленая группа и толстая ярко-желтая группа) оформляются на основе присвоения одному из двух кластеров подграфа.

Подграф часто используется для визуального выделения кластера узлов (то есть, чтобы отличить конкретную непрерывную «группу» узлов от остальных узлов в графе); тем не менее, нет требования (как вы можете видеть из моего примера), что ребра, которые вы выбрали для стилизации путем присвоения данному подграфу, принадлежат непрерывной «группе» узлов - вы можете назначить любые ребра, которые вы хотите назначить для данный подграф.)

для меня стилизация узлов по группам аналогична практике HTML определения класса и присвоения его коллекции div в разметке HTML

12 голосов
/ 18 марта 2014

Хотя ответ @ doug верный (используйте подграфы для назначения одинакового стиля группам объектов), я считаю, что мой пример лучше:

digraph G {                                                                     
  compound=true;
  subgraph columns {
    c0r0 -> c0r1;
    c0r1 -> c0r2;
    c1r0 -> c1r1;
    c1r1 -> c1r2;
    c2r0 -> c2r1;
    c2r1 -> c2r2;
  }
  subgraph rows {
    edge [color=red, constraint=false];
    c0r0 -> c1r0;
    c1r0 -> c2r0;
    c0r1 -> c1r1;
    c1r1 -> c2r1;
    c0r2 -> c1r2;
    c1r2 -> c2r2;
  }
}


cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 

the resulting graph

1 голос
/ 04 апреля 2019

, как указывает @bousch, подграф не нужен.

"Все ребра, определенные ниже объявления стиля ребра с помощью" edge [color = ... etc] ", будут использовать этот стиль."

digraph G {                                                                     
  compound=true;
  
    c0r0 -> c0r1;
    c0r1 -> c0r2;
    c1r0 -> c1r1;
    c1r1 -> c1r2;
    c2r0 -> c2r1;
    c2r1 -> c2r2;
  
    edge [color=red, constraint=false];
    c0r0 -> c1r0;
    c1r0 -> c2r0;
    c0r1 -> c1r1;
    c1r1 -> c2r1;
    c0r2 -> c1r2;
    c1r2 -> c2r2;
  
}

сделает то же самое, что и @ bukzor.

...