amcharts4处理对数值轴上零值的正确方法

时间:2019-02-22 09:32:52

标签: javascript amcharts amcharts4

我想在amcharts4中显示一些变化很大的数据,所以我喜欢在值轴上使用对数刻度。不幸的是,数据包含一些零值,当然不能用对数标度显示。

我尝试在呈现图表之前将零值更改为1,这可以工作,但是现在这些值不再正确。

data.forEach(item => {
  for (const key in item) {
    if (item[key] === 0) {
      item[key] = 1;
    }
  }
});

有没有更好的方法可以用对数值轴处理零值,从而显示正确的数据?

Here是一支数字笔,显示了我当前的解决方案。

1 个答案:

答案 0 :(得分:1)

似乎没有与v3的input属性直接等效的属性,该属性会自动处理这种情况。数据预处理是一个步骤,但是您也可以将原始值复制到单独的对象属性中,并使用一系列工具提示适配器动态显示您的实际值(在这种情况下,使用global adapter很方便):

treatZeroAs

如果您想伪造一个零标签,您也可以使用一个适配器,因为在这种情况下,最小值为1:

data.forEach(item => {
  for (const key in item) {
    if (item[key] <= 0) {
      item[key+"_actual"] = item[key]; //copy the original value into a different property
      item[key] = 1;
    }
  }
});
// ...

//display actual data that was re-mapped if it exists
am4core.globalAdapter.addAll(am4charts.LineSeries, "tooltipText", (text, target) => {
  if ((target instanceof am4charts.LineSeries) && target.dataFields) {
    let valueField = target.dataFields.valueY;
    let tooltipData = target.tooltipDataItem;
    if (tooltipData.dataContext[valueField + "_actual"] !== undefined) {
      return "{" + valueField + "_actual}";
    }
    else {
      return text;
    }
  }
  else {
    return text;
  }
})

Codepen