html条形图显示统计数据,echarts堆叠条形图计算总数()

本文介绍了如何使用ECharts创建堆叠条形图并动态计算每个类别的总数。通过设置图表配置项,包括tooltip、legend和series,实现了在条形图上方显示总和。同时,当用户在legend中选择或取消选择类别时,能够实时更新总数。通过监听legendselectchanged事件,并根据legend的selected属性动态计算总和,确保总数随着图表数据的变化而变化。
摘要由CSDN通过智能技术生成

echart堆叠条形图计算总数

先上图

首先写入一个数据用于最上边总数的展示

option配置如下

option = {

title: {

text: '未处理'

},

tooltip: {

trigger: 'axis',

axisPointer: { // 坐标轴指示器,坐标轴触发有效

type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'

},

formatter: (param, ticket, callback) => {

var str = ''

for (const item of param) {

item.seriesName && (str += item.marker + ' ' + item.seriesName + ':' + item.value + '
')

}

return str

}

},

legend: {

data: ['高危', '中低', '低危'],

right: '20px'

},

grid: {

left: '3%',

right: '4%',

bottom: '3%',

width: '100%',

containLabel: true

},

xAxis: {

data: ['业务系统1', '业务系统1', '业务系统1', '业务系统1', '业务系统1', '业务系统1', '业务系统1']

},

yAxis: {

type: 'value'

},

series: [

{

name: '高危',

type: 'bar',

color: '#F56C6C',

barWidth: 30,

stack: '总量',

label: {

show: true

},

data: [50, 60, 59, 50, 50, 50, 50]

},

{

name: '中低',

type: 'bar',

stack: '总量',

color: '#F5AF45',

barWidth: 30,

label: {

show: true

},

data: [70, 70, 70, 70, 70, 70, 70]

},

{

name: '低危',

type: 'bar',

color: '#8BC663',

stack: '总量',

barWidth: 30,

label: {

show: true

},

data: [70, 70, 70, 70, 70, 70, 70]

},

{

name: '',

type: 'bar',

data: [0,0,0,0,0,0,0,],

color: '#bbf',

stack: '总量',

barWidth: 30,

label: {

show: true,

position: 'top',

color: 'black'

}

}

]

};

效果如图,其中通过formatter进行tooltip的筛选,出现一个总和为0的样式

接着在option外部对数据进行操作,使得最后一项的数据是前三项的总和

var series = option.series

function getSum (params) {

var datavalue = 0

for (var i = 0; i < series.length; i++) {

datavalue += series[i].data[params.dataIndex]

}

return datavalue

}

series[series.length - 1].label.formatter = getSum

myChart.setOption(option)

至此可完成基本效果,

但是 !!但是!!但是

echarts数据还有一个筛选功能,如图:可以将点击高危,使其颜色变为灰色并且不展示,此时还要让总数随之变化

此时需要对数据监听,在点击图标时会触发以下函数,先将回调的函数进行打印可看到如下结果

myChart.on('legendselectchanged', (obj) => {

console.log(obj)

})

也就是selected可查看当前选中状态,而之前的series[i]中的name即为对应的键值,因此只需判断是否存在该点即可将未选择的点过滤掉,接下来在对其进行因此setOption即可

myChart.on('legendselectchanged', (obj) => {

function getSum (params) {

var datavalue = 0

for (var i = 0; i < series.length; i++) {

if (obj.selected[series[i].name]) {

datavalue += series[i].data[params.dataIndex]

}

}

return datavalue

}

series[series.length - 1].label.formatter = getSum

myChart.setOption(option)

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值