Использование Graphviz / yed для создания графика времени + графика - PullRequest
0 голосов
/ 01 мая 2020

У меня была идея представить что-то вроде родословного дерева, в котором узлы соединены ориентированными графами, но добавить дополнительное измерение времени по оси Y. Итак, представьте верхнюю часть страницы, представляющую 1900, и вплоть до самого низа до 2020 года.

enter image description here

Есть ли способ сделать что-то подобное в графвизе или йеде? По сути, автоматическое размещение заданного орграфа, но положение узлов на оси у связано со временем?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

График, который вам нужен в Graphviz, довольно прост, вы просто включаете dir=TD, разделяете ваши узлы на подграфы и используете rank=same внутри них, чтобы заставить их быть на одном уровне.

Сложность может быть связана с достижением узла Z в вашем примере. Вы можете сделать это, используя HTML -подобные таблицы в метке. Полная графическая интерпретация вашего примера изображения будет выглядеть следующим образом:

digraph  {
    node [shape=rect style=filled fillcolor="#d2deee" fontname="Arial"]
    edge [color="#658bb2"]
    dir = TD
    1900 -> 1950 -> 2020 [style=invis]
    subgraph 1900 {
        rank=same
        1900 [
            fillcolor="#efefef"
            fontcolor="#182697"
            fontname="Arial bold"
        ]
        A
    }
    subgraph 1950 {
        rank=same
        1950 [
            fillcolor="#efefef"
            fontcolor="#182697"
            fontname="Arial bold"
        ]
        B
    }
    subgraph 2020 {
        rank=same
        2020 [
            fillcolor="#efefef"
            fontcolor="#182697"
            fontname="Arial bold"
        ]
        C
    }
    Z [
        shape=plain
        label=<
            <table cellspacing="0">
                <tr>
                    <td cellpadding="15" border="0" width="70" port="p1"></td>
                    <td border="0">Z</td>
                    <td cellpadding="15" border="0" width="70" port="p2"></td>
                </tr>
            </table>
        >
    ]
    A -> Z:p1
    B -> Z:p2
    Z -> C
    C
}

, что сделает вас:

result

1 голос
/ 02 мая 2020

Вот shells.gv - часть источника:

digraph shells {
    size="7,8";
    node [fontsize=24, shape = plaintext];

    1972 -> 1976;
    1976 -> 1978;
    1978 -> 1980;
    1980 -> 1982;
    1982 -> 1984;
    1984 -> 1986;
    1986 -> 1988;
    1988 -> 1990;
    1990 -> future;

    node [fontsize=20, shape = box];
    { rank=same;  1976 Mashey Bourne; }
    { rank=same;  1978 Formshell csh; }
    { rank=same;  1980 esh vsh; }
    { rank=same;  1982 ksh "System-V"; }
    { rank=same;  1984 v9sh tcsh; }
    { rank=same;  1986 "ksh-i"; }
    { rank=same;  1988 KornShell Perl rc; }
    { rank=same;  1990 tcl Bash; }
    { rank=same;  "future" POSIX "ksh-POSIX"; }

    Thompson -> Mashey;
    Thompson -> Bourne;
    Thompson -> csh;
    csh -> tcsh;
    Bourne -> ksh;
    Bourne -> esh;
    Bourne -> vsh;
    Bourne -> "System-V";
    Bourne -> v9sh;
    v9sh -> rc;
    Bourne -> Bash;
    "ksh-i" -> Bash;
    KornShell -> Bash;
    esh -> ksh;
    vsh -> ksh;
    Formshell -> ksh;
    csh -> ksh;
    KornShell -> POSIX;
    "System-V" -> POSIX;
    ksh -> "ksh-i";
    "ksh-i" -> KornShell;
    KornShell -> "ksh-POSIX";
    Bourne -> Formshell;

    edge [style=invis];
    1984 -> v9sh -> tcsh ;
    1988 -> rc -> KornShell;
    Formshell -> csh;
    KornShell -> Perl;
}

Производим это: enter image description here

...