PHP数据可视化与图表生成技术数据可视化让数据更容易理解。PHP可以通过GD库生成图表也可以生成JSON数据供前端图表库使用。今天说说PHP中图表生成和数据处理的技术。用GD库生成柱状图phpclass ChartGenerator{public function createBarChart(array $data, string $title ): string{$width 800;$height 500;$padding 60;$chartWidth $width - 2 * $padding;$chartHeight $height - 2 * $padding;$image imagecreatetruecolor($width, $height);$white imagecolorallocate($image, 255, 255, 255);$gray imagecolorallocate($image, 200, 200, 200);$black imagecolorallocate($image, 0, 0, 0);$blue imagecolorallocate($image, 52, 152, 219);$darkBlue imagecolorallocate($image, 41, 128, 185);imagefill($image, 0, 0, $white);// 标题if ($title) {$titleX ($width - strlen($title) * imagefontwidth(5)) / 2;imagestring($image, 5, (int)$titleX, 10, $title, $black);}// 坐标轴imageline($image, $padding, $padding, $padding, $height - $padding, $black);imageline($image, $padding, $height - $padding, $width - $padding, $height - $padding, $black);$maxValue max($data);$values array_values($data);$labels array_keys($data);$n count($data);$barWidth ($chartWidth / $n) * 0.6;$gap ($chartWidth / $n) * 0.4;// 网格线for ($i 0; $i 4; $i) {$y $height - $padding - ($chartHeight / 4) * $i;imageline($image, $padding, (int)$y, $width - $padding, (int)$y, $gray);$valueLabel (int)($maxValue / 4 * $i);imagestring($image, 2, 5, (int)($y - 8), (string)$valueLabel, $black);}// 绘制柱状foreach ($values as $i $value) {$barHeight ($value / $maxValue) * $chartHeight;$x1 $padding $i * ($barWidth $gap) $gap / 2;$y1 $height - $padding - $barHeight;imagefilledrectangle($image, (int)$x1, (int)$y1, (int)($x1 $barWidth), $height - $padding, $blue);// 数值标签$valueLabel (string)$value;$labelX $x1 ($barWidth - strlen($valueLabel) * imagefontwidth(2)) / 2;imagestring($image, 2, (int)$labelX, (int)($y1 - 18), $valueLabel, $darkBlue);// X轴标签$label $labels[$i] ?? ;$labelX $x1 ($barWidth - strlen($label) * imagefontwidth(2)) / 2;imagestring($image, 2, (int)$labelX, $height - $padding 5, $label, $black);}ob_start();imagepng($image);$imageData ob_get_clean();imagedestroy($image);return data:image/png;base64, . base64_encode($imageData);}public function createPieChart(array $data, string $title ): string{$width 600;$height 500;$image imagecreatetruecolor($width, $height);$white imagecolorallocate($image, 255, 255, 255);imagefill($image, 0, 0, $white);$centerX 250;$centerY 250;$radius 150;$total array_sum($data);$colors [imagecolorallocate($image, 52, 152, 219),imagecolorallocate($image, 46, 204, 113),imagecolorallocate($image, 231, 76, 60),imagecolorallocate($image, 241, 196, 15),imagecolorallocate($image, 155, 89, 182),imagecolorallocate($image, 149, 165, 166),];$startAngle 0;foreach ($data as $label $value) {$angle ($value / $total) * 360;$color $colors[array_rand($colors)];imagefilledarc($image, $centerX, $centerY, $radius * 2, $radius * 2, (int)$startAngle, (int)($startAngle $angle), $color, IMG_ARC_PIE);$midAngle deg2rad($startAngle $angle / 2);$legendX $radius 50;$legendY 30 iterator_count(new ArrayIterator($data)) * 20;$startAngle $angle;}ob_start();imagepng($image);$imageData ob_get_clean();imagedestroy($image);return data:image/png;base64, . base64_encode($imageData);}public function renderHtml(array $data, string $chartType bar): string{$jsonData json_encode($data);return HTML;}}$chart new ChartGenerator();$data [一月 120, 二月 200, 三月 150, 四月 80, 五月 300, 六月 250];echo $chart-renderHtml($data, bar);?数据可视化重要的是选择合适的图表类型。柱状图适合比较数据折线图适合趋势展示饼图适合组成分析。PHP生成图表有两种方式服务端用GD库生成图片客户端用Chart.js等库渲染。根据场景选择合适的方式。
PHP数据可视化与图表生成技术
PHP数据可视化与图表生成技术数据可视化让数据更容易理解。PHP可以通过GD库生成图表也可以生成JSON数据供前端图表库使用。今天说说PHP中图表生成和数据处理的技术。用GD库生成柱状图phpclass ChartGenerator{public function createBarChart(array $data, string $title ): string{$width 800;$height 500;$padding 60;$chartWidth $width - 2 * $padding;$chartHeight $height - 2 * $padding;$image imagecreatetruecolor($width, $height);$white imagecolorallocate($image, 255, 255, 255);$gray imagecolorallocate($image, 200, 200, 200);$black imagecolorallocate($image, 0, 0, 0);$blue imagecolorallocate($image, 52, 152, 219);$darkBlue imagecolorallocate($image, 41, 128, 185);imagefill($image, 0, 0, $white);// 标题if ($title) {$titleX ($width - strlen($title) * imagefontwidth(5)) / 2;imagestring($image, 5, (int)$titleX, 10, $title, $black);}// 坐标轴imageline($image, $padding, $padding, $padding, $height - $padding, $black);imageline($image, $padding, $height - $padding, $width - $padding, $height - $padding, $black);$maxValue max($data);$values array_values($data);$labels array_keys($data);$n count($data);$barWidth ($chartWidth / $n) * 0.6;$gap ($chartWidth / $n) * 0.4;// 网格线for ($i 0; $i 4; $i) {$y $height - $padding - ($chartHeight / 4) * $i;imageline($image, $padding, (int)$y, $width - $padding, (int)$y, $gray);$valueLabel (int)($maxValue / 4 * $i);imagestring($image, 2, 5, (int)($y - 8), (string)$valueLabel, $black);}// 绘制柱状foreach ($values as $i $value) {$barHeight ($value / $maxValue) * $chartHeight;$x1 $padding $i * ($barWidth $gap) $gap / 2;$y1 $height - $padding - $barHeight;imagefilledrectangle($image, (int)$x1, (int)$y1, (int)($x1 $barWidth), $height - $padding, $blue);// 数值标签$valueLabel (string)$value;$labelX $x1 ($barWidth - strlen($valueLabel) * imagefontwidth(2)) / 2;imagestring($image, 2, (int)$labelX, (int)($y1 - 18), $valueLabel, $darkBlue);// X轴标签$label $labels[$i] ?? ;$labelX $x1 ($barWidth - strlen($label) * imagefontwidth(2)) / 2;imagestring($image, 2, (int)$labelX, $height - $padding 5, $label, $black);}ob_start();imagepng($image);$imageData ob_get_clean();imagedestroy($image);return data:image/png;base64, . base64_encode($imageData);}public function createPieChart(array $data, string $title ): string{$width 600;$height 500;$image imagecreatetruecolor($width, $height);$white imagecolorallocate($image, 255, 255, 255);imagefill($image, 0, 0, $white);$centerX 250;$centerY 250;$radius 150;$total array_sum($data);$colors [imagecolorallocate($image, 52, 152, 219),imagecolorallocate($image, 46, 204, 113),imagecolorallocate($image, 231, 76, 60),imagecolorallocate($image, 241, 196, 15),imagecolorallocate($image, 155, 89, 182),imagecolorallocate($image, 149, 165, 166),];$startAngle 0;foreach ($data as $label $value) {$angle ($value / $total) * 360;$color $colors[array_rand($colors)];imagefilledarc($image, $centerX, $centerY, $radius * 2, $radius * 2, (int)$startAngle, (int)($startAngle $angle), $color, IMG_ARC_PIE);$midAngle deg2rad($startAngle $angle / 2);$legendX $radius 50;$legendY 30 iterator_count(new ArrayIterator($data)) * 20;$startAngle $angle;}ob_start();imagepng($image);$imageData ob_get_clean();imagedestroy($image);return data:image/png;base64, . base64_encode($imageData);}public function renderHtml(array $data, string $chartType bar): string{$jsonData json_encode($data);return HTML;}}$chart new ChartGenerator();$data [一月 120, 二月 200, 三月 150, 四月 80, 五月 300, 六月 250];echo $chart-renderHtml($data, bar);?数据可视化重要的是选择合适的图表类型。柱状图适合比较数据折线图适合趋势展示饼图适合组成分析。PHP生成图表有两种方式服务端用GD库生成图片客户端用Chart.js等库渲染。根据场景选择合适的方式。