【问题标题】:Highcharts - Show the percentage difference between data points on a seriesHighcharts - 显示一系列数据点之间的百分比差异
【发布时间】:2015-10-21 07:00:47
【问题描述】:

我在折线图上绘制了一系列数字。我想做的是在每个点之间绘制的线上显示系列中每个后续数据点之间的百分比差异。所以我的数据看起来像这样:

[10,15,20,25,30,35]

例如,在每个点之间的线上,我想显示 10 到 15 或 50% 之间的百分比差异。或介于 20 到 25 (25%) 之间。

有没有办法做到这一点?

【问题讨论】:

  • 您能否详细说明您期望的输出是什么?

标签: highcharts


【解决方案1】:

一种解决方案是计算系列并覆盖该系列的 dataLabels:

$(function () {
    var data = [10,15,20,25,30,35]; // original data
    var data2 = [];  // calculated series
    var perDiff;  // percent difference
    for (var i=0;i<data.length-1;i++) {
        // calculate the % diff, we're going to use this as the point name
        perDiff  = (data[i+1] - data[i]) / data[i] * 100;
        data2.push({
            // this is assuming a category xAxis, if your original array has x & y values, you'll need to do a little more math
            x : i + 0.5,
            // find the half way mark
            y : (data[i] + data[i+1]) /2,
            // set the name, so we can use it in the dataLabel formatter
            name : Math.round(perDiff) + "%"
        });
    }
    $('#container').highcharts({
        chart: {
            type: 'line'
        },
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        yAxis: [{
            title: {
                text: 'Primary Axis'
            },
            gridLineWidth: 0
        }],
        tooltip: {
            enabled: false
        },
        plotOptions: {
        },
        series: [{
            data: data,
            dataLabels : {
                enabled: true
            }
        }, {
            name: 'Percent Difference',
            data: data2,
            type: 'scatter',
            color: 'grey',
            dataLabels: {
                enabled: true,
                color: 'grey',
                formatter : function() {
                    return this.point.name;
                }
            }

        }]
    });
});

http://jsfiddle.net/blaird/xx84fwkp/1/

【讨论】:

  • 很好的解决方案芭芭拉!,我也猜想他不需要这个系列的传说,它是图表上的标记。我会将这个 :marker{enabled:false,states :{hover:{ enabled:false }}}, showInLegend: false 添加到系列属性中,只是为了让事情更顺利:) jsfiddle.net/2s40p6m9/2
  • 很棒的解决方案!正是我正在寻找的。谢谢!
  • 好的,另一个问题。所以最终我试图从谷歌电子表格中加载数据。我将如何将该数据加载到变量中?我是否可以使用我想要的数据在变量中创建另一个 $('#container').highcharts( )?
  • 您应该将其作为另一个问题提出。在 cmets 中很难回答,而提出另一个问题使其可以被其他人搜索。您是否使用 google docs api 来获取数据?你能得到 Google 电子表格的 Jason 对象吗
  • 没有。我通过 Highcharts 方法获取数据。但我会为它提出一个新问题。