我正在使用类似于此示例的雷达图:
https://pchart.net/doc.draw.radar.html

我的数据范围从 1 分到 4 分,所以我配置了一些选项:

$options = array(
    'SegmentHeight' => 1,
    'Segments' => 3,
    'FixedMax' => 4
);

仍然存在一个问题:即使我的最低分数是 1,雷达图的中心值始终为 0。

如何将图表中的最小值更改为 1?

最佳答案

您可以创建一个“最小”值,但前提是您愿意 fork 库并进行一些更改。

比赛计划

最简单、最直接的方法是创建一个我将称之为 FixedMin 的新选项。如果且仅当提供了这个新选项(并且满足非自动分割的其他标准),您才能达到您所寻求的效果。

如果您希望在不提供 SegmentHeightSegmentsFixedMax 的情况下生成最小值,您还需要修改 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/

    10-13 04:53