tito10047 / php-sparkline
在PHP中生成sparkline SVG图表
1.0.0
2024-06-10 13:04 UTC
Requires
- php: ^8.1
- illuminate/collections: ^9.43|^10.0|^11.0
- ramsey/uuid: ^4.6
- spatie/period: ^2.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- larapack/dd: ^1.1
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-10 13:45:28 UTC
README
PHP-Sparkline生成了GitHub风格的sparkline图表。阅读本指南了解如何使用它。
安装
您可以通过composer安装此包
composer require tito10047/php-sparkline
使用方法
$sparkLine = SparkLine::new(collect([ new SparkLineDay( count: 1, day: new DateTimeImmutable('2022-01-01') ), new SparkLineDay( count: 2, day: new DateTimeImmutable('2022-01-02') ), // … ])); $total = $sparkLine->getTotal(); $period = $sparkLine->getPeriod(); // Spatie\Period $svg = $sparkLine->make();
要构建sparkline,您需要传递一个包含Brendt\SparkLineDay
对象的集合。此对象接受两个参数:一个count
和一个DateTimeInterface
。例如,您可以这样转换数据库条目:
$days = PostVistisPerDay::query() ->orderByDesc('day') ->limit(20) ->get() ->map(fn (SparkLineDay $row) => new SparkLineDay( count: $row->visits, day: Carbon::make($row->day), ));
然而,在许多情况下,您可能希望使用SQL查询聚合数据,并实时将这些聚合转换为SparkLineDay
对象。
$days = DB::query() ->from((new Post())->getTable()) ->selectRaw('`published_at_day`, COUNT(*) as `visits`') ->groupBy('published_at_day') ->orderByDesc('published_at_day') ->whereNotNull('published_at_day') ->limit(20) ->get() ->map(fn (object $row) => new SparkLineDay( count: $row->visits, day: Carbon::make($row->published_at_day), ));
精度
为5分钟间隔设置精度
$sparkLine = SparkLine::new(collect([ new SparkLineDay( count: 1, day: new DateTimeImmutable('2022-01-01') ), new SparkLineDay( count: 2, day: new DateTimeImmutable('2022-01-02') ), // … ]),Period::MINUTE,5); $svg = $sparkLine->make();
自定义
此包提供了一些自定义sparkline的方法。首先,您可以挑选任意数量的颜色,sparkline将自动生成一个从这些颜色到渐变的生成
$sparkLine = SparkLine::new($days)->withColors('#4285F4', '#31ACF2', '#2BC9F4');
接下来,您可以配置一些数字
$sparkLine = SparkLine::new($days) ->withStrokeWidth(4) ->withDimensions(500, 100) ->withMaxItemAmount(100) ->withMaxValue(20);
withStrokeWidth
将确定线条的宽度withDimensions
将确定渲染的SVG的宽度和高度withMaxItemAmount
将确定显示多少天。如果您最初传递的天数多于这个最大值,则将省略最老的几天。如果最大数量设置为比当前天数多的数字,则sparkline将包含空的天数。默认情况下,将使用给定天数。withMaxValue
将设置sparkline的最大值。如果您有多个sparkline,并且它们都应该有相同的刻度,这非常有用。默认情况下,最大值基于给定天数确定。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
安全漏洞
请参阅我们的安全策略以了解如何报告安全漏洞。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。