我正在使用类似于此示例的雷达图: https://pchart.net/doc.draw.radar.html
我的数据范围从1到4,所以我配置了一些选项:
$options = array(
'SegmentHeight' => 1,
'Segments' => 3,
'FixedMax' => 4
);
仍然存在一个问题:即使我的最低分数为1,雷达图表的中心值也始终为0。
如何将图表中的最小值更改为1?
答案 0 :(得分:4)
您可以创建“最小”值,但前提是您愿意分叉库并进行一些更改。
最简单,最直接的方法是创建一个我称之为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
创建的偏移量一样。
我们可以在函数计算绘图位置(line~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)
这很有效;对于每个片段,它生成一个标签,该片段是高度的片段(例如,20个单元的4个片段应生成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...
的Ta-DA。