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
相关产品推荐
相关产品推荐

