AmCharts:带子类别的簇状条形图
AmCharts: Clustered bar chart with sub-categories
我尝试在 amcharts 中实现带有子类别的聚类条形图(我的 x 轴上有两个级别)。我找不到办法做到这一点。
有人知道怎么做吗?
棘手的部分是图表上的父类别 name_fr
。为此,我们需要在 CategoryAxis
.
中使用 Guide
(https://docs.amcharts.com/3/javascriptcharts/Guide)
但是为了使用 Guide
,每个类别都需要一个唯一的标识符,因为每个指南(在您的例子中是每个名称)都需要一个起点字段(称为 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
之前,如果您不想对 Guide
数组进行硬编码,您可以先从数据中生成它。
这里的思路是按照name_fr
对数据进行分组,然后抓取第一个item category作为guide的Category
,最后一个item category作为ToCategory
] 指南。
您可以编写自己的 JavaScript 函数来进行分组,但在这里我很懒,只想使用一个名为 underscore.js
(https://underscorejs.org) 的库来这样做。
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
以制作图表。
我尝试在 amcharts 中实现带有子类别的聚类条形图(我的 x 轴上有两个级别)。我找不到办法做到这一点。
有人知道怎么做吗?
棘手的部分是图表上的父类别 name_fr
。为此,我们需要在 CategoryAxis
.
Guide
(https://docs.amcharts.com/3/javascriptcharts/Guide)
但是为了使用 Guide
,每个类别都需要一个唯一的标识符,因为每个指南(在您的例子中是每个名称)都需要一个起点字段(称为 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
之前,如果您不想对 Guide
数组进行硬编码,您可以先从数据中生成它。
这里的思路是按照name_fr
对数据进行分组,然后抓取第一个item category作为guide的Category
,最后一个item category作为ToCategory
] 指南。
您可以编写自己的 JavaScript 函数来进行分组,但在这里我很懒,只想使用一个名为 underscore.js
(https://underscorejs.org) 的库来这样做。
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
以制作图表。