高图汇总JSON数据

问题描述 投票:0回答:1

试图在react中使用highcharts,我的数据是下面的格式。

data: [{
        country: 'USA',
        color: '#00FF00',
        population: 10
    }, 
    {
        country: 'USA',
        color: '#00FF00',
        population: 2
    },
    {
        country: 'Canada',
        color: '#00FF00',
        population: 13
    }]

我想实现的是: 一个柱状图,每个国家有一个柱状图(在这个例子中,两个柱状图美国& Canda),每个柱状图应该显示人口的总和。也就是说,美国有12条,加拿大有13条。此外,我还想实现 xAxis 名字应该是 USACanada.

有没有任何选项来分组bysum,Highchart提供的盒子来解决我的情况?

当我在谷歌上搜索 "Highchart数据聚合 "时,第一个结果是带我到了以下网站 文件 但却无济于事.相关jsfiddle:https:/jsfiddle.netsmj8qwun1

javascript highcharts
1个回答
1
投票

你得把数据还原成你要找的格式,像这样。

let o = {
  data: [{
      country: "USA",
      color: "#00FF00",
      population: 10,
    },
    {
      country: "USA",
      color: "#00FF00",
      population: 2,
    },
    {
      country: "Canada",
      color: "#00FF00",
      population: 13,
    },
  ]
}

let formattedData = o.data.reduce((p, c) => {
  let found = p.find((o) => o.country === c.country);
  if (found) {
    found.y += c.population;
  } else {
    let {
      population,
      ...rest
    } = c;
    p.push({ ...rest,
      y: population
    });
  }
  return p;
}, []);

Highcharts.chart('container', {
  chart: {
    type: 'column'
  },

  xAxis: {
    categories: formattedData.map(o => o.country)
  },
  plotOptions: {
    series: {
      // general options for all series
      dataGrouping: {
        enabled: true,
      }
    },
  },

  series: [{
    data: formattedData
  }]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>

<div id="container" style="height: 400px"></div>

0
投票

你也可以只转换 countryname, populationy 并启用堆栈。

series: [{
  type: 'column',
  stacking: true,
  data: [{
      name: 'USA',
      color: '#00FF00',
      y: 10
    },
    {
      name: 'USA',
      color: '#00FF00',
      y: 2
    },
    {
      name: 'Canada',
      color: '#00FF00',
      y: 13
    }
  ]
}]

现场演示: http:/jsfiddle.netBlackLabel6m4e8x0y4980。

API参考。 https:/api.highcharts.comhighchartsseries.column.stacking。

© www.soinside.com 2019 - 2024. All rights reserved.