【问题标题】:How to make highcharts default to 0 for missing data如何使缺失数据的highcharts默认为0
【发布时间】:2012-05-10 19:46:59
【问题描述】:

我有一个 1 分钟间隔的时间序列。我想在缺失点为 0 的图表中显示它。

我找到了 xAxis.ordinal 并关闭了它,它显示了正确间隔的时间序列。问题是它直接在点之间画线,而对于缺失的数据没有去 0。

【问题讨论】:

  • Wraithan - 你有没有想过这个问题?
  • @Wraithan 您找到将缺失点设置为 0 的方法了吗?

标签: javascript highcharts


【解决方案1】:

一种方法是对数据进行预处理,将null 替换为0:

var withNulls = [null, 12, 23, 45, 3.44, null, 0];
var noNulls = withNulls.map(function (item) {
    return (item === null) ? 0 : item;
});

保存在 jsfiddle 上的示例:http://jsfiddle.net/7mhMP/

【讨论】:

  • 这不回答问题,这只是避免问题。
  • 示例不是 X 上的时间序列,它不是日期时间值,而是具有任何名称的自定义比例,因此它可以工作。当您缺少日期值对时会出现问题,因此系列在日期时间尺度上不连续并且图表线消失。
【解决方案2】:

我已经彻底搜索了API reference of HighCharts,但他们不提供该选项。他们提供的是当null 数据介于两者之间时禁用点连接的选项(仅限折线图和面积图):

var chart = new Highcharts.Chart({
    plotOptions: {
        line: {
            connectNulls: false
        }
    }
});

这是根据 API 的默认设置,所以我不确定为什么您的数据确实与 null 之间的值连接。也许他们最近更改了默认设置?

我觉得这很好地代表了您的数据,因为默认 null 为 0 似乎具有误导性。

【讨论】:

  • 该问题要求进行 0 替换 - 没有中断,没有空连接与点到点的直线平均值。缺失值应解释为 0。这是我们的意思是没有观察到任何事件,而不是我们错过了观察并且不知道该值。我们知道该值为 0。在数据库期刊统计中非常流行。
  • OP实际上表示他想用0替换缺失的信息。他不知道它是0。这是一个很大的区别。
  • Highs-forums 也很难理解。在我看来,“我想在缺失点为 0 的图表中显示它”意味着在我的任务中缺失点应该被解释为 0。我希望它为 0,因为我知道如果缺席它应该为零。在 Highs 中,唯一允许的假设是 no-data-then-nulls,迫切需要的是 no-data-then-zeroes 假设。
  • 我明白你的意思。我仍然非常担心这一点。我真的想不出任何你想解释缺失数据为0的情况。
  • 它很受欢迎。例如,您在数据库中计算您的站点事件:错误、登录等。当然,只有发生的事件才会写入日志(日志)。当您按天计算事件分组时,有些天可能没有发生任何事件,它们将按日期顺序丢失。这意味着观察到 0 个事件。如果它为空,则意味着“没有数据 - 我们没有观察这一天,我们没有计算,没有记录,我们不知道”。
【解决方案3】:

您必须将丢失的数据填充为 0。 因为 highchart 不知道 xAxis 间隔。

如果您有一个以 1 分钟 为间隔的时间序列,则应将每个缺失的 分钟 数据设置为 0; 如果您有一个以 1 天 为间隔的时间序列,则应将每个缺失的 day 数据设置为 0。

【讨论】:

    【解决方案4】:

    我有同样的问题,我的理解是您应该将数据库中的数据结构设置为 VARCHAR 并将默认值设置为 null,这样在没有数据的地方它就变为 NULL。然后它接受空值,highchart 不显示并将缺失区域与null 值连接。
    此外,您必须以NULL 接收数据,并且不要将它们更改为''。
    请参阅此工作示例:

    var chart = new Highcharts.Chart({
    
        chart: {
            defaultSeriesType: 'spline', // use line or spline
            renderTo: 'container1'
        },
    
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
    
        series: [{
            data: [9, 4,null, 2, 1, 0, 6, 5, 4, 1, 6, 4]
        }]
    
    });
    

    here 是使用null 和'' 的两个不同图表的小提琴

    更新:
    如果你使用 parseINT 来推送数据,你应该记住 parseINT(NULL) 给你 NAN 所以对于这个错误尝试手动推送 NULL,如下所示:

    var val = parseInt(rows[i]);
    if (isNaN(val))
    {
      val = null;
      result.push(val);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2012-07-10
      • 2017-03-10
      • 2010-09-25
      • 1970-01-01
      相关资源
      最近更新 更多