innmind/graphviz

Graphviz abstraction

3.4.0 2023-10-22 14:23 UTC

This package is auto-updated.

Last update: 2024-04-22 15:24:05 UTC


README

Build Status codecov Type Coverage

Graphviz model to help build graphs. This model goal is to express the possibilities offered by Graphviz (though note that all features are not implemented).

All objects of this package are immutable.

Important: you must use vimeo/psalm to make sure you use this library correctly.

Installation

composer require innmind/graphviz

Usage

use Innmind\Graphviz\{
    Layout\Dot,
    Graph,
    Node,
    Node\Shape,
};
use Innmind\Url\Url;
use Innmind\Colour\Colour;
use Innmind\OperatingSystem\Factory;
use Innmind\Server\Control\Server\Command;

$dot = Dot::of();
$clusterOne = Graph::directed('one')
    ->target(Url::of('http://example.com'))
    ->displayAs('One')
    ->fillWithColor(Colour::blue->toRGBA())
    ->add($one = Node::named('one'));
$clusterTwo = Graph::directed('two')
    ->fillWithColor(Colour::red->toRGBA())
    ->add($two = Node::named('two'));
$clusterThree = Graph::directed('three')
    ->add($three = Node::named('three'));

$root = Node::named('root')
    ->shaped(Shape::house())
    ->linkedTo($one->name())
    ->linkedTo($two->name());

$graph = Graph::directed()
    ->add($root)
    ->add($one->linkedTo($three->name()))
    ->add($two->linkedTo($three->name()))
    ->cluster($clusterOne)
    ->cluster($clusterTwo)
    ->cluster($clusterThree);

$output = $dot($graph);

Factory::build()
    ->control()
    ->processes()
    ->execute(
        Command::foreground('dot')
            ->withShortOption('Tsvg')
            ->withShortOption('o', 'graph.svg')
            ->withInput($output),
    )
    ->wait();

This example will produce the given svg file: (source)