Chart.js AmCharts:带有子类别的聚集条形图

Chart.js AmCharts:带有子类别的聚集条形图,chart.js,bar-chart,amcharts,Chart.js,Bar Chart,Amcharts,我尝试在我的x轴上的两个层次上实现一个带有amcharts子类别的聚集条形图。我找不到一个办法 有人知道怎么做吗?棘手的部分是图表上的父类别名称。要做到这一点,我们需要在CategoryAxis中使用指南 但为了使用指南,每个类别都需要一个唯一的标识符,就像您的案例中的每个指南一样,每个名称都需要一个名为category的起点字段和一个名为ToCategory的终点字段 为每个数据点创建ID 在这里,我只是在名称和日期字段。如果您的数据有一个ID字段,您也可以使用它 let data = [

我尝试在我的x轴上的两个层次上实现一个带有amcharts子类别的聚集条形图。我找不到一个办法


有人知道怎么做吗?

棘手的部分是图表上的父类别名称。要做到这一点,我们需要在CategoryAxis中使用指南

但为了使用指南,每个类别都需要一个唯一的标识符,就像您的案例中的每个指南一样,每个名称都需要一个名为category的起点字段和一个名为ToCategory的终点字段

为每个数据点创建ID 在这里,我只是在名称和日期字段。如果您的数据有一个ID字段,您也可以使用它

let data = [
    {
        "category": "Allemagne-1/3/2005",
        "name_fr": "Allemagne",
        "date": "1/3/2005",
        "Décile 1": 11.91166848,
        "Décile 5": 6.663209907,
        "Décile 9": 3.912389412
    },
    {
        "category": "Allemagne-12/18/2017",
        "name_fr": "Allemagne",
        "date": "12/18/2017",
        "Décile 1": 12.08203299,
        "Décile 5": 6.181569343,
        "Décile 9": 3.380401158
    },
    {
        "category": "Espagne-1/3/2005",
        "name_fr": "Espagne",
        "date": "1/3/2005",
        "Décile 1": 18.16145046,
        "Décile 5": 8.049555152,
        "Décile 9": 4.02786022
    },
    {
        "category": "Espagne-12/18/2017",
        "name_fr": "Espagne",
        "date": "12/18/2017",
        "Décile 1": 22.27695636,
        "Décile 5": 8.698725621,
        "Décile 9": 4.224440949
    },
    {
        "category": "France-1/3/2005",
        "name_fr": "France",
        "date": "1/3/2005",
        "Décile 1": 11.29143493,
        "Décile 5": 6.365859777,
        "Décile 9": 3.476250813
    },
    {
        "category": "France-12/18/2017",
        "name_fr": "France",
        "date": "12/18/2017",
        "Décile 1": 11.46405229,
        "Décile 5": 6.355936042,
        "Décile 9": 3.441408741
    },
    {
        "category": "Italie-1/3/2005",
        "name_fr": "Italie",
        "date": "1/3/2005",
        "Décile 1": 16.86187094,
        "Décile 5": 7.798630041,
        "Décile 9": 4.017535647
    },
    {
        "category": "Italie-12/18/2017",
        "name_fr": "Italie",
        "date": "12/18/2017",
        "Décile 1": 21.92640815,
        "Décile 5": 9.365977512,
        "Décile 9": 4.893619709
    },
    {
        "category": "Royaume-Uni-1/3/2005",
        "name_fr": "Royaume-Uni",
        "date": "1/3/2005",
        "Décile 1": 13.55694413,
        "Décile 5": 6.402068504,
        "Décile 9": 3.057193284
    },
    {
        "category": "Royaume-Uni-12/19/2016",
        "name_fr": "Royaume-Uni",
        "date": "12/19/2016",
        "Décile 1": 13.19564289,
        "Décile 5": 6.639341135,
        "Décile 9": 3.359725023
    }
];
从数据创建向导数组 在将数据插入AmChart之前,如果不想硬编码指南数组,可以先从数据生成指南数组

这里的想法是按名称按数据分组,然后获取第一个项目类别作为指南的类别,最后一个项目类别作为指南的ToCategory

您可以编写自己的JavaScript函数来执行分组操作,但这里我很懒,只想使用一个名为underline.js的库来执行此操作

let byName = _.groupBy(data, "name_fr");
let guides = _.map(byName, function(items, key) {
    return {
        "category": _.first(items).category,
        "toCategory": _.last(items).category,
        "lineAlpha": 0,
        "expand": true,
        "label": key,
        "labelRotation": 0,
        "tickLength": 80
    };
});
绘制图表 然后,您可以将数据和指南一起输入AmChart以生成图形


小提琴:

棘手的部分是图表上的父类别名称。要做到这一点,我们需要在CategoryAxis中使用指南

但为了使用指南,每个类别都需要一个唯一的标识符,就像您的案例中的每个指南一样,每个名称都需要一个名为category的起点字段和一个名为ToCategory的终点字段

为每个数据点创建ID 在这里,我只是在名称和日期字段。如果您的数据有一个ID字段,您也可以使用它

let data = [
    {
        "category": "Allemagne-1/3/2005",
        "name_fr": "Allemagne",
        "date": "1/3/2005",
        "Décile 1": 11.91166848,
        "Décile 5": 6.663209907,
        "Décile 9": 3.912389412
    },
    {
        "category": "Allemagne-12/18/2017",
        "name_fr": "Allemagne",
        "date": "12/18/2017",
        "Décile 1": 12.08203299,
        "Décile 5": 6.181569343,
        "Décile 9": 3.380401158
    },
    {
        "category": "Espagne-1/3/2005",
        "name_fr": "Espagne",
        "date": "1/3/2005",
        "Décile 1": 18.16145046,
        "Décile 5": 8.049555152,
        "Décile 9": 4.02786022
    },
    {
        "category": "Espagne-12/18/2017",
        "name_fr": "Espagne",
        "date": "12/18/2017",
        "Décile 1": 22.27695636,
        "Décile 5": 8.698725621,
        "Décile 9": 4.224440949
    },
    {
        "category": "France-1/3/2005",
        "name_fr": "France",
        "date": "1/3/2005",
        "Décile 1": 11.29143493,
        "Décile 5": 6.365859777,
        "Décile 9": 3.476250813
    },
    {
        "category": "France-12/18/2017",
        "name_fr": "France",
        "date": "12/18/2017",
        "Décile 1": 11.46405229,
        "Décile 5": 6.355936042,
        "Décile 9": 3.441408741
    },
    {
        "category": "Italie-1/3/2005",
        "name_fr": "Italie",
        "date": "1/3/2005",
        "Décile 1": 16.86187094,
        "Décile 5": 7.798630041,
        "Décile 9": 4.017535647
    },
    {
        "category": "Italie-12/18/2017",
        "name_fr": "Italie",
        "date": "12/18/2017",
        "Décile 1": 21.92640815,
        "Décile 5": 9.365977512,
        "Décile 9": 4.893619709
    },
    {
        "category": "Royaume-Uni-1/3/2005",
        "name_fr": "Royaume-Uni",
        "date": "1/3/2005",
        "Décile 1": 13.55694413,
        "Décile 5": 6.402068504,
        "Décile 9": 3.057193284
    },
    {
        "category": "Royaume-Uni-12/19/2016",
        "name_fr": "Royaume-Uni",
        "date": "12/19/2016",
        "Décile 1": 13.19564289,
        "Décile 5": 6.639341135,
        "Décile 9": 3.359725023
    }
];
从数据创建向导数组 在将数据插入AmChart之前,如果不想硬编码指南数组,可以先从数据生成指南数组

这里的想法是按名称按数据分组,然后获取第一个项目类别作为指南的类别,最后一个项目类别作为指南的ToCategory

您可以编写自己的JavaScript函数来执行分组操作,但这里我很懒,只想使用一个名为underline.js的库来执行此操作

let byName = _.groupBy(data, "name_fr");
let guides = _.map(byName, function(items, key) {
    return {
        "category": _.first(items).category,
        "toCategory": _.last(items).category,
        "lineAlpha": 0,
        "expand": true,
        "label": key,
        "labelRotation": 0,
        "tickLength": 80
    };
});
绘制图表 然后,您可以将数据和指南一起输入AmChart以生成图形


fiddle:

很好的解决方案,它对amchart4有效吗?@Rinold:对不起,我没有遵循amchart4,所以我不确定。你自己试过了吗?很好的解决方案,它对amchart4有效吗?@Rinold:对不起,我没有遵循amchart4,所以我不确定。你自己试过吗?