简体   繁体   English

如何将 amcharts 4 用于与教程略有不同的多组和堆积柱形图

[英]How do I use amcharts 4 for a multiple group and stacked column chart slightly different from the tutorials

I was trying to adapt a grouped and stacked column chart based on amcharts 4 demo and ended up with this fiddle: https://jsfiddle.net/ricardocostabrrj/odmbk9L6/8/ but I couldn't achieve what I really need.我试图根据 amcharts 4 演示改编一个分组和堆叠的柱形图,最后得到了这个小提琴: https://jsfiddle.net/ricardocostabrrj/odmbk9L6/8/但我无法实现我真正需要的。

Code is below:代码如下:

am4core.useTheme(am4themes_animated);
// Themes end

// Create chart instance
var chart = am4core.create("chartdiv", am4charts.XYChart);


// Add data
chart.data = [{
  "year": "2018",
  "H1": 5.5,
  "H2": 5.5
}, {
  "year": "2019",
  "H1": 2.1,
  "H2": 6.7
}, {
  "year": "2020",
  "H1": 4.1,
  "H2": 3.7
}];

// Create axes
var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
categoryAxis.dataFields.category = "year";
categoryAxis.renderer.grid.template.location = 0;


var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.renderer.inside = true;
valueAxis.renderer.labels.template.disabled = true;
valueAxis.min = 0;

// Create series
function createSeries(field, name) {

  // Set up series
  var series = chart.series.push(new am4charts.ColumnSeries());
  series.name = name;
  series.dataFields.valueY = field;
  series.dataFields.categoryX = "year";
  series.sequencedInterpolation = true;

  // Make it stacked
  series.stacked = true;

  // Configure columns
  series.columns.template.width = am4core.percent(60);
  series.columns.template.tooltipText = "[bold]{name}[/]\n[font-size:14px]{categoryX}: {valueY}";

  // Add label
  var labelBullet = series.bullets.push(new am4charts.LabelBullet());
  labelBullet.label.text = "{valueY}";
  labelBullet.locationY = 0.5;

  return series;
}

createSeries("H1", "1st Half");
createSeries("H2", "2nd Half");

In my case, I'd like to have a chart with this same format, but for 3 different products, grouped by year and each stacking 1st and 2nd Half sales.就我而言,我想要一个具有相同格式的图表,但针对 3 种不同的产品,按年份分组,每一种都堆叠第一和第二半的销售额。 Something like this (sorry for the drawing):像这样的东西(对不起绘图):

https://i.stack.imgur.com/oYuVv.png https://i.stack.imgur.com/oYuVv.png

Data - not sure of the format is ok - would look like this:数据 - 不确定格式是否正常 - 看起来像这样:

    "year": "2018",
    "Half: "H1",
    "ProdA": 5.5,
    "ProdB": 3.1,
    "ProdC": 1.9
    },{
    "year": "2018",
    "Half: "H2",
    "ProdA": 3.5,
    "ProdB": 3.1,
    "ProdC": 1.9
    }, {
    "year": "2019",
    "Half: "H1",
    "ProdA": 2.5,
    "ProdB": 1.1,
    "ProdC": 2.3
    }, {
    "year": "2019",
    "Half: "H2",
    "ProdA": 7.0,
    "ProdB": 1.0,
    "ProdC": 4.5
    }, {
    "year": "2020",
    "Half: "H1",
    "ProdA": 9.1,
    "ProdB": 2.8,
    "ProdC": 3.1
    },{
    "year": "2020",
    "Half: "H2",
    "ProdA": 10.4,
    "ProdB": 2.1,
    "ProdC": 1.2
    }
}];

Any ideas about how o build such chart?关于如何构建此类图表的任何想法? Thanks!谢谢!

So it looks like you're combining the stacked and clustered column chart.所以看起来你正在组合堆叠和聚集的柱形图。

You need to set the first set of data in your series to stacked = false .您需要将系列中的第一组数据设置为stacked = false The all remaining data that you want to stack on top to stacked = true .您要堆叠在顶部的所有剩余数据都已stacked = true This is how they do it as described here: https://www.amcharts.com/demos/stacked-clustered-column-chart/这就是他们这样做的方式,如下所述: https://www.amcharts.com/demos/stacked-clustered-column-chart/

I just added a third parameter (as described in the link above), of stacked then passed that value and set it in the createSeries function.我刚刚添加了第三个参数(如上面链接中所述), stacked然后传递该值并将其设置在createSeries function 中。

Here's an adaptation of what you had, but I fudged the numbers.这是对你所拥有的内容的改编,但我捏造了数字。 https://jsfiddle.net/eabtvduq/ https://jsfiddle.net/eabtvduq/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM