javascript - Highcharts:按百分比分组的列

标签 javascript charts highcharts

我的问题类似于this onethis one ,除了我没有简单的系列,而是数据组。

基本上,我只想要一个具有“堆叠百分比列”图表行为的图表,但不堆叠该列。

这是一个绝对值 (fiddle) 的示例:

var data = [
{
    name : 'A',
    data : [72, 50, 52]
},
{
    name : 'B',
    data : [23, 41, 12]
},
{
    name : 'C',
    data : [18, 9, 11]
},
{
    name : 'D',
    data : [89, 46, 54]
}];


// CHART

$('#container').highcharts(
{
    chart :
    {
        type : 'column'
    },
    xAxis :
    {
        categories : ['Group 1', 'Group 2', 'Group 3']
    },
    yAxis :
    {
        title :
        {
            text : null
        }
    },
    tooltip :
    {
        shared: true
    },
    plotOptions :
    {
        column :
        {
            dataLabels :
            {
                enabled : true
            }
        }
    },
    title :
    {
        text : 'Example'
    },
    series : data
});

在这个例子中,我有三个组(“组 1”、“组 2”和“组 3”)和四个数据(“A”、“B”、“C”和“D”)。

我想显示每个组的“A”、“B”、“C”和“D”的百分比,而且我希望在单击图例中的某个项目时更新该百分比隐藏/显示数据(就像处理堆叠列一样)。实际上它就像一个“堆叠百分比列”图表,只是我不想堆叠列...

最佳答案

您好这里的结帐示例可以解决您的问题。

http://jsfiddle.net/Evsw4/63/ .

您可以使用 formatter 函数来格式化数据标签。请注意,如果定义了格式,则格式优先,格式化程序将被忽略。

API 引用:http://api.highcharts.com/highcharts#plotOptions.series.dataLabels.formatter

用于显示百分比和考虑组的格式化程序函数的代码。

            dataLabels: {
                enabled: true,
                formatter: function () {
                    var mychart = $('#container').highcharts();
                    var mytotal = 0;

                    for (i = 0; i < mychart.series.length; i++) {
                        if (mychart.series[i].visible) {
                            mytotal += parseInt(mychart.series[i].yData[0]);
                        }
                    }
                    var pcnt = (this.y / mytotal) * 100;
                    return Highcharts.numberFormat(pcnt) + '%';
                }
            }

完整代码:

var data = [{
    name: 'A',
    data: [72, 50, 52]
}, {
    name: 'B',
    data: [23, 41, 12]
}, {
    name: 'C',
    data: [18, 9, 11]
}, {
    name: 'D',
    data: [89, 46, 54]
}];
$('#container').highcharts({
    chart: {
        type: 'column'
    },
    xAxis: {
        categories: ['Group 1', 'Group 2', 'Group 3']
    },
    yAxis: {
        title: {
            text: null
        }
    },
    tooltip: {
        shared: true
    },
    plotOptions: {
        column: {
            dataLabels: {
                enabled: true
            }
        },
        series: {
            dataLabels: {
                enabled: true,
                formatter: function () {
                    var mychart = $('#container').highcharts();
                    var mytotal = 0;

                    for (i = 0; i < mychart.series.length; i++) {
                        if (mychart.series[i].visible) {
                            mytotal += parseInt(mychart.series[i].yData[0]);
                        }
                    }
                    var pcnt = (this.y / mytotal) * 100;
                    return Highcharts.numberFormat(pcnt) + '%';
                }
            }
        }
    },
    title: {
        text: 'Example'
    },
    series: data
});

关于javascript - Highcharts:按百分比分组的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22534359/

相关文章:

javascript - 如何使循环购买最大金额?

javascript - 通过单击元素并将该属性传递给字段,让输入字段识别它已被填充

javascript - 使用 d3js 根据用户选择调用备用图表绘制函数

html - 谷歌图表 : How to increase width of tooltip

excel - 如何忽略图表中的非数字单元格?

javascript - 验证复制|克隆的输入字段是否具有相同的信息

javascript - 如何使 Highcharts 标记带有相对日期的日期时间 X 轴?

javascript - 如何在javascript中创建数组的动态数组

javascript - 使用javascript中的正则表达式过滤 Markdown 中的列表标记