pierresh/simca

PHP 的 SVG 图表

0.0.4 2024-07-22 14:29 UTC

This package is auto-updated.

Last update: 2024-09-22 14:50:56 UTC


README

PHP 的 SVG 图表

本项目旨在成为创建 PHP 中 SVG 图表的完整解决方案。当图表需要在后端生成以便包含在电子邮件和 PDF 中时,特别有用。

examples

可用的图表类型

柱状图

  • 可以堆叠
  • 可以通过 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