我正在使用类似于此示例的雷达图:
https://pchart.net/doc.draw.radar.html
我的数据范围从 1 分到 4 分,所以我配置了一些选项:
$options = array(
'SegmentHeight' => 1,
'Segments' => 3,
'FixedMax' => 4
);
仍然存在一个问题:即使我的最低分数是 1,雷达图的中心值始终为 0。
如何将图表中的最小值更改为 1?
最佳答案
您可以创建一个“最小”值,但前提是您愿意 fork 库并进行一些更改。
比赛计划
最简单、最直接的方法是创建一个我将称之为 FixedMin
的新选项。如果且仅当提供了这个新选项(并且满足非自动分割的其他标准),您才能达到您所寻求的效果。
如果您希望在不提供 SegmentHeight
、 Segments
和 FixedMax
的情况下生成最小值,您还需要修改 pImage::computeScale
,它会在未提供这些配置值时生成这些配置值。
我们需要做三个改变:
FixedMin
让我们编码
drawRadar
方法保存在 class/pRadar.class.php
中。打开它。让我们来看看我们的游戏计划。首先是 ,让我们添加配置选项。我会将它与其他人(第 ~38 行)一起添加,如下所示:
$FixedMin = isset($Format["FixedMin"]) ? $Format["FixedMin"] : 0;
让
FixedMin
默认为 0
因为这是默认的 pChart 行为。第二个 ,我们需要以某种方式欺骗 pChart 重新定位这些较大的值,好像它们更小以适应
FixedMin
创建的偏移量。我们可以在函数计算绘图位置的地方(行~319)做到这一点。找到循环
foreach($DataS["Data"] as $Key => $Value)
(第 ~328 行)。在这里,我们将通过在循环顶部添加以下行来修改 $Value
:$Value -= $FixedMin; // Let's offset the perceived value by our new minimum
第三个 ,我们需要更改轴标签的文本值。在
$DrawAxisValues
包含的条件中,您会发现这行代码(第 ~255 行):$Label = ($j * $SegmentHeight)
这很好用;对于每个段,它生成一个标签,该标签是段乘以高度(例如,4 个 20 个单位的段应生成 4 个标签:20、40、60、80)。但它不适用于我们的
FixedMin
。让我们重用偏移量。在这种情况下,我们增加了偏移量,以产生最小值的错觉。用这一行替换该行:$Label = ($j * $SegmentHeight) + $FixedMin;
回顾
我们为最小段创建了一个新的配置变量;对于每个值,我们减去最小值(或偏移量);并通过添加最小值(或偏移量)来重新调整轴标签。
注意事项
我们只修改了雷达图;其他图表类型不会受到影响。不要尝试使用值低于配置的最小值的数据。这样做的危险可能是作者没有包含此选项的原因。
展示并演讲
我无权访问您的数据集,因此我使用了 pChart 示例并增加了“申请审查”示例,因此所有分数都在 20 到 40 之间。
// FixedMin set to 0, "default" behavior
$Options = array(
'SegmentHeight' => 20,
'Segments' => 2,
'FixedMax' => 40,
'FixedMin' => 0, // And so on...
正如预期的那样,现在让我们看看我们的新代码......
// FixedMin set to 20, smaller SegmentHeight
$Options = array(
'SegmentHeight' => 10,
'Segments' => 2,
'FixedMax' => 40,
'FixedMin' => 20, // And so on...
达达。
关于pChart 雷达图,最少 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20680041/