pChart雷达图表至少1

时间:2013-12-19 11:05:35

标签: pchart

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

游戏计划

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

如果您希望在不提供SegmentHeightSegmentsFixedMax的情况下生成最低要求,则还需要修改生成这些配置值的pImage::computeScale他们没有提供。

我们需要进行三项更改:

  1. 创建名为FixedMin
  2. 的新配置选项
  3. 调整值的位置
  4. 调整标签文字
  5. 我们的代码

    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...
    

    Default behavior

    正如所料,现在让我们查看我们的新代码......

    // FixedMin set to 20, smaller SegmentHeight
    $Options = array(
     'SegmentHeight' => 10,
     'Segments' => 2,
     'FixedMax' => 40,
     'FixedMin' => 20, // And so on...
    

    With a minimum of 20

    的Ta-DA。