【Echarts】折线图/趋势图区间框选计算

针对折线图类的趋势图,以时间为横坐标,根据用户图形的区域框选可实时计算框选范围内的均值、总量或其他数据,具体实现代码如下:

let xData = ['2022-05-01', '2022-05-02', '2022-05-03', '2022-05-04', '2022-05-05', '2022-05-06', '2022-05-07']; // x轴数据
option = {
  toolbox: { //框选计算工具栏
    show: true,
    feature: {
      brush: {
        show: true,
        title: {
          lineX: '框选计算',
          clear: '关闭框选'
        }
      },
      saveAsImage: { show: true }
    },
    top: 0,
    right: 15,
    itemSize: 20 //工具栏 icon 的大小
  },
  brush: {
    toolbox: ['lineX', 'clear'],
    xAxisIndex: 0,
    brushStyle: {
      borderWidth: 1,
      color: 'rgba(120,140,180,0.2)',
      borderColor: 'rgba(120,140,180,0.8)'
    }
  },
  xAxis: {
    type: 'category',
    data: xData
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: '销售量',
      type: 'line',
      data: [150, 230, 224, 218, 135, 147, 260],
    }
  ]
};

 // 点击框选 brushEnd、brushSelected
myChart.on('brushSelected', function (params) {
    if (params.batch.length < 1 || params.batch[0].areas.length < 1) {
        $('#brushData').html('')
        return
    }
    var range = params.batch[0].areas[0].coordRange; //根据坐标获取选中区域数据
    range[range.length - 1] = range[range.length - 1] + 1;
    var brushed = [], nameData = [], sumData = [], meanData = [];
    var brushComponent = params.batch[0];
    for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
        var name = brushComponent.selected[sIdx].seriesName;
        var values = myChart.getOption().series[sIdx].data.slice(...range);
        var timeData = xData.slice(...range);
        var timeRange = '';
        if (values.length < 1 || timeData.length < 1) {
            return;
        }
        if (timeData.length === 1) {
            timeRange = timeData[0]
        } else {
            timeRange = timeData[0] + '至' + timeData[timeData.length - 1]
        }
        var sum = SumNum(values) ? SumNum(values) : 0;
        var mean = AverageNum(values) ? AverageNum(values) : 0;
        sumData.push(sum)
        meanData.push(mean);
        nameData.push(name);
        var temp = `${name}:日均值:${mean.toFixed(0)},总量:${sum}`;
        brushed.push(temp);
    }
    var text = brushed.join('');
    var brushInfo = timeRange + '\n' + text;
    $('#brushData').html(brushInfo);
    
    myChart.setOption({
      title: {
        backgroundColor: '#333',
        text: brushInfo,
        bottom: 0,
        right: '10%',
        width: 100,
        textStyle: {
          fontSize: 12,
          color: '#fff'
        }
      }
  });
});



//均值
function AverageNum(arr) {
	let sum = eval(arr.join("+"));
  let svg = (sum / arr.length * 100) / 100;
	return svg;
}
//求和
function SumNum(arr) {
	let sum = eval(arr.join("+"));
	return sum;
}

实现效果:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
echarts官方提供的文档中,我们可以找到关于散点和柱状框选功能的API。然而,对于折线图框选功能,目前官方并没有提供相应的支持。但是,根据我的方法,你可以通过以下三个步骤来实现折线图框选功能: 1. 首先,你需要在echarts实例的配置项的series属性中添加折线图的显示。这可以通过在option配置项中添加line属性来实现。 2. 其次,你需要为折线图添加框选功能。你可以通过在option配置项中的toolbox属性中添加brush工具来实现。brush工具可以允许用户框选并选择想要的数据。 3. 最后,你可以在实例中触发brushSelected事件来获取用户框选的数据。这样,你就可以根据用户的选择进行相应的跳转或其他操作。 需要注意的是,以上方法是基于我研究的资料和经验提供的,因此可能会有一些限制和局限性。如果官方未提供折线图框选功能,可能需要通过自定义或其他方式来实现你的需求。 综上所述,你可以尝试通过添加折线图的显示、添加框选功能,并通过触发brushSelected事件来实现echarts折线图框选功能。希望这能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [echart框选--适用于散点,柱状, 折线图](https://blog.csdn.net/weixin_44437473/article/details/105223087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [后端:SpringBoot 前端:Vue+Echarts基于校园一卡通的学生考勤信息分析展示系统设计与实现](https://download.csdn.net/download/a332324956/85122259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值