macocci7 / php-lorenz-curve
一个用于绘制洛伦兹曲线的PHP库。
Requires
- php: >=8.1
- macocci7/php-frequency-table: ^1.4
- macocci7/php-plotter2d: ^0.1
- nette/neon: ^3.4
Requires (Dev)
- php-parallel-lint/php-parallel-lint: 1.3
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
README
一个用于绘制洛伦兹曲线的PHP库。
1. 功能
PHP-LorenzCurve
可以绘制洛伦兹曲线并计算基尼系数。
2. 内容
3. 要求
- PHP 8.1或更高版本
- Imagick PHP扩展
- Composer
4. 安装
composer require macocci7-lorenz-curve
5. 使用
5.1. 基本使用
要绘制洛伦兹曲线,首先创建一个LorenzCurve
类的实例。
<?php require_once __DIR__ . '/../vendor/autoload.php'; use Macocci7\PhpLorenzCurve\LorenzCurve; $lc = new LorenzCurve();
接下来,设置数据、类范围并将图像保存到文件中。
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->create('img/BasicUsage.png');
这将产生下面的图像。
5.2. 调整外观
5.2.1. 绘制网格线
您可以使用指定宽度和颜色的grid()
方法绘制网格线。
注意:指定
null
作为颜色代码会导致透明。
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->grid(1, '#ffcccc') // width: 1 pix, color: '#ffcccc' ->create('img/DrawGrid.png');
这将产生下面的图像。
5.2.2. 绘制向上凸曲线
您可以通过使用reverseClasses()
方法按降序排列类的列表来创建向上凸的洛伦兹曲线。
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->reverseClasses() ->grid(1, '#ffcccc') ->create('img/UpwardConvexCurve.png');
这将产生下面的图像。
5.2.3. 设置图像大小
PHP-LorenzCurve
默认生成宽度为400
像素,高度为300
像素的图像。
您可以使用resize()
方法更改图像大小。
- 格式:
resize(int $width, int $height)
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->grid(1, '#ffcccc') ->resize(450, 400) ->create('img/ResizeImage.png');
此代码的结果如下
5.2.4. 设置绘图区域属性
默认情况下,PHP-LorenzCurve
设置Plotarea
的属性
offsetX
:图像宽度的10%offsetY
:图像高度的10%width
:图像宽度的80%height
:图像高度的70%backgroundColor
:null
(透明)
您可以使用plotarea()
方法更改它们。
- 格式
plotarea( array $offset = [], // [int $width, int $height] int $width = 0, int $height = 0, string|null $backgroundColor = null, )
示例代码
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->grid(1, '#ffcccc') ->plotarea( offset: [80, 50], width: 280, height: 200, backgroundColor: '#eeeeee', ) ->create('img/SetPlotareaAttrs.png');
此代码的结果如下
5.2.5. 设置标题和标签
您可以使用caption()
、labelX()
和labelY()
方法设置标题
和标签
。
-
格式
caption( string $caption, int $offsetX = 0, int $offsetY = 0, )
labelX( string $label, int $offsetX = 0, int $offsetY = 0, )
labelY( string $label, int $offsetX = 0, int $offsetY = 0, )
示例代码
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->grid(1, '#ffcccc') ->plotarea(offset: [60, 40]) ->caption('CAPTION') ->labelX('Cumulative Relative Frequency', offsetX: 0, offsetY: 10) ->labelY('Cumulative Relative Subtotal') ->create('img/CaptionLabels.png');
此代码的结果如下
5.2.6. 使用数组设置属性
您可以使用传递数组作为参数的config()
方法设置属性。
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->config([ 'canvasBackgroundColor' => '#3333cc', 'showGrid' => true, 'gridWidth' => 1, 'gridColor' => '#0066ff', 'axisWidth' => 3, 'axisColor' => '#ffffff', 'scaleWidth' => 2, 'scaleLength' => 6, 'scaleColor' => '#ffffff', 'scaleFontSize' => 14, 'scaleFontColor' => '#ffffff', 'lorenzCurveWidth' => 1, 'lorenzCurveColor' => '#ffff00', 'lorenzCurveBackgroundColor' => null, // transparent 'completeEqualityLineWidth' => 3, 'completeEqualityLineColor' => '#ffffff', 'completeEqualityLineDash' => [8, 8], 'fontColor' => '#ffffff', 'caption' => 'Config From Array', ]) ->create('img/ConfigFromArray.png');
此代码的结果如下
更多信息:[可定制属性](#user-content-528-customisable-attributes)
5.2.7. 使用霓虹文件设置属性
您可以使用传递霓虹文件路径作为参数的config()
方法设置属性。
首先,创建一个霓虹文件。
canvasBackgroundColor: '#3333cc' showGrid: true gridWidth: 1 gridColor: '#0066ff' axisWidth: 3 axisColor: '#ffffff' scaleWidth: 2 scaleLength: 6 scaleColor: '#ffffff' scaleFontSize: 14 scaleFontColor: '#ffffff' lorenzCurveWidth: 1 lorenzCurveColor: '#ffff00' lorenzCurveBackgroundColor: completeEqualityLineWidth: 3 completeEqualityLineColor: '#ffffff' completeEqualityLineDash: [8, 8] fontColor: '#ffffff' caption: 'Config From File'
其次,指定霓虹文件的路径作为config()
方法的参数。
$lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->config('ConfigFromFile.neon') ->create('img/ConfigFromFile.png');
此代码的结果如下
更多信息:[可定制属性](#user-content-528-customisable-attributes)
5.2.8. 可定制属性
5.3. 基尼系数
您可以使用getGinisCoefficient()
方法获取基尼系数,而无需生成图像。
var_dump( $lc ->setData([1, 5, 10, 15, 20]) ->setClassRange(5) ->getGinisCoefficient() );
结果如下。
double(0.37647058823529)
6. 示例
-
BasicUsage.php >> 结果是
-
DrawGrid.php >> 结果是
-
UpwardConvexCurve.php >> 结果是
-
ResizeImage.php >> 结果是
-
SetPlotareaAttrs.php >> 结果为
-
CaptionLabels.php >> 结果为
-
ConfigFromArray.php >> 结果为
-
ConfigFromFile.php 使用 ConfigFromFile.neon >> 结果为
-
GinisCoefficient.php >> 结果为
double(0.37647058823529)
-
GinisCoefficient0.php >> 结果为
▼基尼系数
double(0)
-
GinisCoefficientAlmost1.php >> 结果为
▼基尼系数
double(0.99800399201597)
-
GinisCoefficient1.php >> 结果为
▼基尼系数
double(1)
7. LICENSE
版权所有 2024 macocci7