You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPGraph PiePlot设置:饼图显百分比,图例显绝对值

解决JPGraph饼图:图例显示绝对值,切片显示百分比的问题

我懂你要的效果——饼图的每个切片上显示百分比,而图例里对应显示每个产品的点击绝对值对吧?之前你遇到的问题是SetLabelType()会同时影响饼图标签和图例的格式,那咱们换个更直接的方式:手动构建带绝对值的图例文本,让饼图单独控制切片上的百分比显示就好。

下面是修改后的完整代码,我会标注关键修改点:

<?php
require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_pie.php');
require_once ('jpgraph/jpgraph_pie3d.php');

$data_json = '{"product_a":2,"product_b":3,"product_c":1,"product_d":1}';
$data_json = json_decode($data_json,true);

$products = [];
$products_clicks = [];

// 关键修改1:手动构建图例文本,直接拼接产品名和绝对值
foreach($data_json as $product => $clicks) {
    $products[] = $product . " (" . $clicks . ")"; // 图例显示"product_a (2)"这样的格式
    $products_clicks[] = $clicks;
}

$graph = new PieGraph(500,250,'auto');
$theme_class = new VividTheme;
$graph->SetTheme($theme_class);
$graph->title->Set("Product Clicks");
$graph->SetBox(false);
$graph->SetMargin(40,40,40,70);

$p1 = new PiePlot3D($products_clicks);
$graph->Add($p1);

$p1->ShowBorder();
$p1->SetColor('black');
// 关键修改2:这个设置只控制饼图切片上的标签,显示百分比
$p1->SetLabelType(PIE_VALUE_PER);
// 关键修改3:传入我们手动构建好的图例文本,不受SetLabelType影响
$p1->SetLegends($products);

$p1->SetTheme("sand");
$p1->SetAngle(25);

$graph->Stroke();
?>

为什么这样能行?

  • 原来的代码里,你在图例文本里加了%.1f%%占位符,这会让JPGraph自动用百分比替换这个占位符,而现在我们直接把绝对值硬编码进图例文本,完全绕开了这个自动替换逻辑。
  • SetLabelType(PIE_VALUE_PER)只会作用于饼图切片上的标签,不会影响我们手动传入的图例内容,这样就实现了两者的分离显示。

这样运行后,饼图切片上会显示每个产品点击量的占比百分比,而右侧图例里会清晰显示每个产品的名称+点击绝对值,完全符合你的需求~

内容的提问来源于stack exchange,提问作者Benjamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:57:50