pierresh / simca
PHP 的 SVG 图表
0.0.4
2024-07-22 14:29 UTC
Requires
- php: >=8.1
- meyfa/php-svg: ^0.15.0
Requires (Dev)
- pestphp/pest: ^2.34
- pestphp/pest-plugin-watch: ^2.1
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.11
- rector/rector: ^1.1
- symfony/error-handler: ^7.1
README
PHP 的 SVG 图表
本项目旨在成为创建 PHP 中 SVG 图表的完整解决方案。当图表需要在后端生成以便包含在电子邮件和 PDF 中时,特别有用。
可用的图表类型
柱状图
- 可以堆叠
- 可以通过
nbYkeys2
选项拥有右侧轴
折线图
- 可以是曲线或直线
- 可以包括时间刻度
- 可以显示目标
- 可以显示事件
- 可以显示趋势线
- 可以通过
nbYkeys2
选项拥有右侧轴
面积图
与折线图相同,只需将选项 fillOpacity
设置为一个大于 0 的值(例如 0.3);
饼图
- 可以通过添加系数转换为极坐标饼图(见以下示例)
气泡图
- 可以包括时间刻度
雷达图
- 可以堆叠
安装
composer require pierresh\simca
如何使用
生成 SVG 图表的示例
use Pierresh\Simca\Charts\BarChart; $chart = (new BarChart(600, 400)) ->setSeries([[10, 45, 30, 25], [15, 20, 15, 25], [5, 2, 10, 15]]) ->setLabels(['A', 'B', 'C', 'D']) ->setColors(['#2dd55b', '#ffc409', '#0054e9']) ->setOptions([ 'stacked' => true, 'nbYkeys2' => 1, ]) ->render();
use Pierresh\Simca\Charts\LineChart; $chart = (new LineChart(600, 400)) ->setSeries([[10, 45, 30, 25], [15, 20, 15, 25]]) ->setLabels([ '2024-06-01 08:00', '2024-06-01 09:00', '2024-06-01 13:00', '2024-06-01 13:30', ]) ->addObjectiveY1(20) ->addEvent('2024-06-01 10:00') ->addEvent('2024-06-01 12:15') ->showTrend() ->setOptions([ 'timeChart' => true, 'unitY1' => 'T', 'nbYkeys2' => 1, ]) ->render();
use Pierresh\Simca\Charts\PieChart; // The secondary value is an optional coefficient for polar pie chart $chart = (new PieChart(400, 400)) ->setSeries([[14, 0.5], [3, 0.9], [5, 0.8], [5, 1], [5, 0.9]]) ->render();
use Pierresh\Simca\Charts\BubbleChart; $chart = (new BubbleChart(600, 400)) ->setSeries([ ['2024-06-01 08:00', 40, 30], ['2024-06-01 09:00', 20, 15], ['2024-06-01 12:00', 30, 25], ]) ->setOptions([ 'timeChart' => true, ]) ->render();
use Pierresh\Simca\Charts\RadarChart; $chart = (new RadarChart(600, 400)) ->setSeries([ [65, 59, 90, 81, 56, 55, 40], [38, 48, 40, 19, 96, 27, 100] ]) ->setLabels([ 'Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running', ]) ->setOptions([ 'fillOpacity' => 0.3, ]) ->render();
或者,您可以用 renderBase64()
替换 render()
来获取一个 base64 编码的 SVG 图像。
开发
有一个监视脚本,当有更改时可以自动刷新页面。
首先需要安装 BrowserSync
npm install -g browser-sync
然后可以用以下命令运行示例页面
./watcher.sh ./app/index.php
🧹 使用 Rector 运行重构
composer refactor
⚗️ 使用 PHPStan 运行静态分析
composer stan
✅ 使用 PEST 运行单元测试
composer test
🚀 运行整个质量套件
composer quality