tito10047/php-sparkline

在PHP中生成sparkline SVG图表

1.0.0 2024-06-10 13:04 UTC

This package is auto-updated.

Last update: 2024-09-10 13:45:28 UTC


README

Latest Version on Packagist Tests Total Downloads

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)。有关更多信息,请参阅许可文件