innmind / graphviz
Graphviz abstraction
3.4.0
2023-10-22 14:23 UTC
Requires
- php: ~8.2
- innmind/colour: ~4.0
- innmind/filesystem: ~7.0
- innmind/immutable: ~4.0|~5.0
- innmind/url: ~4.0
Requires (Dev)
- innmind/black-box: ~5.5
- innmind/coding-standard: ~2.0
- phpunit/phpunit: ~10.2
- vimeo/psalm: ~5.12
README
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)