cmcdota/php-graph-to-svg

Compiles SVG graph based on force-directed layout Fruchterman-Reingold Algorithm.

v1.0.7 2023-02-16 20:45 UTC

This package is auto-updated.

Last update: 2024-06-17 00:00:46 UTC


README

PhpGraphToSvg - Force Directed Graph

Total Downloads Latest Stable Version

Simple realisation of Force-Directed Fruchterman–Reingold algorithm.

Special Thanks to Philipp Kindermann.

Installation

Install the latest version with

$ composer require cmcdota/php-graph-to-svg

Basic Usage

use Cmcdota\PhpGraphToSvg\Board;

//Describe Vertexes and their edges (links)
$vertexes = [
    0 => ['name' => '0', 'fill'=> '80ff80', 'edges' => [1]],
    1 => ['name' => '1','fill'=> 'c0c0c0', 'edges' => [2]],
    2 => ['name' => '2', 'edges' => [3]],
    3 => ['name' => '3', 'edges' => [1]],
    5 => ['name' => '5', 'edges' => [0]],
    6 => ['name' => '6', 'edges' => [5]],
    7 => ['name' => '7', 'edges' => [6,3]],
    8 => ['name' => '8', 'edges' => [6,7]],
    9 => ['name' => '9', 'edges' => [5]],
    10 => ['name' => '10', 'edges' => [9]],
    11 => ['name' => '11', 'edges' => [10,8]],
    12 => ['name' => '12', 'edges' => [9,11]],
];
$board = new Board($vertexes, $params);
echo "<html lang='EN'>";
for ($i = 1; $i <= 10; $i++) {
    $svg = $board->renderSVG();
    file_put_contents("step$i.svg", $svg);
    echo "<div style='width:50%'><img src='step$i.svg'  alt='next step' border='1'></div>";
    $board->calculateAndMove(10);
}

Results for Random

Start with random coordinates: Starting Position

Results: Result

Results for Circle

$params=[
    'randomSpawn' => false
];

Start circle-ordered: Starting Position

Results: Result