echarts中使用区域选择(brush)

场景

在某些按周月年统计中,我们想看到任意某几天区域的数据总和时使用

效果

在这里插入图片描述
在这里插入图片描述

代码实现主要点


          /*添加*/
          brush: {
            toolbox: ['lineX', 'clear'],
            xAxisIndex: 0,
            throttleType: 'debounce',//开启选中延迟后调用回调延迟
            throttleDelay: 600,//选中延迟后调用回调延迟时间

          },


        /*添加*/
        myChart.off("brushSelected");//解绑事件处理函数(可根据情况而定是否需要,这里我这边会重绘几次表,所以需要解绑事件处理函数)。
        myChart.on('brushSelected', renderBrushed);
        function renderBrushed(params) {
          // console.log('params',params);
          var brushed = [];
          var brushComponent = params.batch[0];
          // for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
          //   var rawIndices = brushComponent.selected[sIdx].dataIndex;
          //   brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
          // }
          let numArray=[];//选中范围
          if(brushComponent.areas[0]!==undefined){
            numArray=brushComponent.areas[0].coordRange;
          };
          // console.log('numArray',numArray);
          let TotalAdd=0;//总销售金额
          let TotalNum=0;//总销售数量
          let RealityAdd=0;//实际销售金额
          let RealityNum=0;//实际销售数量
          let CancelRefundAdd=0;//取消及退款销售金额
          let CancelRefundNum=0;//取消及退款销售数量
          if(numArray.length>0){
            self.$notify({
              title: '统计值',
              dangerouslyUseHTMLString: true,
              message: '<strong>总销售金额: <i>'+TotalAdd+'</i> 元</strong></br>' +
                '<strong>数量: <i>'+TotalNum+'</i> 盒</strong></br>' +
                '<strong>实际销售金额: <i>'+RealityAdd+'</i> 元</strong></br>' +
                '<strong>数量: <i>'+RealityNum+'</i> 盒</strong></br>' +
                '<strong>取消及退款金额: <i>'+CancelRefundAdd+'</i> 元</strong></br>' +
                '<strong>数量: <i>'+CancelRefundNum+'</i> 盒</strong></br>',
              offset: 100,
              duration:60000
            });
          }
        }


全部代码实现(参考)数据处理可忽略

SaledrawLine(){
        let self=this;
        let XData=[];//X轴
        // 总销售数据
        let TotalDataArrObj={
          TotalDataArr:[],
          TotalDataArrNum:[],
        };
        //取消或退款数据
        let CancelRefundDataArrObj={
          CancelRefundDataArr:[],
          CancelRefundDataArrNum:[],
        };
        // 实际销售数据
        let RealityDataArrObj={
          RealityDataArr:[],
          RealityDataArrNum:[],
        };
        if(this.SaledrawLineObj!==null&&this.SaledrawLineObj!==undefined&&this.SaledrawLineObj!=={}){
          this.SaledrawLineObj.TotalData.forEach(function (item) {
            XData.push(item.time);
            TotalDataArrObj.TotalDataArr.push(item.cashamount);
            TotalDataArrObj.TotalDataArrNum.push(item.ordercount);
          });
          this.SaledrawLineObj.CancelRefundData.forEach(function (item) {
            CancelRefundDataArrObj.CancelRefundDataArr.push(item.cashcramount);
            CancelRefundDataArrObj.CancelRefundDataArrNum.push(item.ordercount);
          });
          this.SaledrawLineObj.RealityData.forEach(function (item) {
            RealityDataArrObj.RealityDataArr.push(item.cashamount);
            RealityDataArrObj.RealityDataArrNum.push(item.ordercount);
          });
        }
        // 基于准备好的dom,初始化echarts实例

        let myChart = echarts.init(self.$refs.Salechart);
        // myChart.dispose()
        myChart.clear();//清空画布防止缓存

        // 绘制图表
        let option = {
          title: {
            text: ''
          },
          color:['#EFF3FF','#15A8FD','#8cd5c2','#7cd5c2','#8cd1c2'],
          tooltip: {//hover效果
            trigger: 'axis',
            formatter: function(params){
              // console.log(params)
              var res;
              res= '<div style="z-index: 1000"><div><span></span>'+params[0].name+'</div>' +
                '<div><span><span style="background-color: #5B8FF9;display: inline-block;width: 10px;height:10px;border-radius: 50%;"></span>&nbsp;总&nbsp;销&nbsp;售&nbsp;:</span>'+allFun.twoNnumthere(params[0].data)+'元</div>' +
                '<div><span><span style="background-color: #5B8FF9;display: inline-block;width: 10px;height:10px;border-radius: 50%;"></span>&nbsp;订单数量:</span>'+TotalDataArrObj.TotalDataArrNum[params[0].dataIndex]+'</div><br/>'+
                '<div><span><span style="background-color: #5AD8A6;display: inline-block;width: 10px;height:10px;border-radius: 50%;"></span>&nbsp;实际销售:</span>'+allFun.twoNnumthere(params[1].data)+'元</div>' +
                '<div><span><span style="background-color: #5AD8A6;display: inline-block;width: 10px;height:10px;border-radius: 50%;"></span>&nbsp;订单数量:</span>'+RealityDataArrObj.RealityDataArrNum[params[0].dataIndex]+'</div><br/>'+
                '<div><span><span style="background-color: #FE947F;display: inline-block;width: 10px;height:10px;border-radius: 50%;"></span>&nbsp;取消及退款:</span>'+allFun.twoNnumthere(params[2].data)+'元</div>' +
                '<div><span><span style="background-color: #FE947F;display: inline-block;width: 10px;height:10px;border-radius: 50%;"></span>&nbsp;订&nbsp;单&nbsp;数&nbsp;量:</span>'+CancelRefundDataArrObj.CancelRefundDataArrNum[params[0].dataIndex]+'</div></div>';
              return res
            }
          },
          textStyle:{
            borderColor:'#B2B2B2',
            borderWidth:1,
            padding:5
          },
          grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
          },
          toolbox: {
            feature: {},
            right:0,
            top:50,//工具栏位置
          },
          xAxis: {
            type: 'category',
            boundaryGap: false,
            data: XData,
          },
          yAxis: {
            name:'单位(元)',
            type: 'value',
            axisLine:{
              show:false
            }
          },
          series: [
            {
              name: '总销售',
              type: 'line',
              data: TotalDataArrObj.TotalDataArr,
              smooth: true,
              itemStyle: {//线条色
                color: '#799ADA'
              },
              areaStyle: {//背景色
                color: '#EFF3FF'
              },
            },
            {
              name: '实际销售',
              type: 'line',
              data:RealityDataArrObj.RealityDataArr,
              smooth: true,
              itemStyle: {//线条色
                color: '#5AD8A6'
              },
              areaStyle: {//背景色
                color: '#DEEFF7'
              },
            }, {
              name: '取消或退款',
              type: 'line',
              aaa: 'ttttttttttt',
              data:CancelRefundDataArrObj.CancelRefundDataArr,
              smooth: true,
              itemStyle: {//线条色
                color: '#FE947F'
              },
              areaStyle: {//背景色
                color: '#DFE5EA'
              },
            },
          ],

          /*添加*/
          brush: {
            toolbox: ['lineX', 'clear'],
            xAxisIndex: 0,
            throttleType: 'debounce',//开启选中延迟后调用回调延迟
            throttleDelay: 600,//选中延迟后调用回调延迟时间

          },

        };
        myChart.setOption(option);

        /*添加*/
        myChart.off("brushSelected");//解绑事件处理函数。
        myChart.on('brushSelected', renderBrushed);
        function renderBrushed(params) {
          // console.log('params',params);
          var brushed = [];
          var brushComponent = params.batch[0];
          // for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
          //   var rawIndices = brushComponent.selected[sIdx].dataIndex;
          //   brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
          // }
          let numArray=[];//选中范围
          if(brushComponent.areas[0]!==undefined){
            numArray=brushComponent.areas[0].coordRange;
          };
          // console.log('numArray',numArray);
          let TotalAdd=0;//总销售金额
          let TotalNum=0;//总销售数量
          TotalDataArrObj.TotalDataArr.forEach((value, index, array)=>{
            if(index>=numArray[0] && index<=numArray[1]){
              // zxs.push(value);
              TotalAdd+=value;
            }
          });
          TotalDataArrObj.TotalDataArrNum.forEach((value, index, array)=>{
            if(index>=numArray[0] && index<=numArray[1]){
              TotalNum+=value;
            }
          });
          let RealityAdd=0;//实际销售金额
          let RealityNum=0;//实际销售数量
          RealityDataArrObj.RealityDataArr.forEach((value, index, array)=>{
            if(index>=numArray[0] && index<=numArray[1]){
              RealityAdd+=value;
            }
          });
          RealityDataArrObj.RealityDataArrNum.forEach((value, index, array)=>{
            if(index>=numArray[0] && index<=numArray[1]){
              RealityNum+=value;
            }
          });
          let CancelRefundAdd=0;//取消及退款销售金额
          let CancelRefundNum=0;//取消及退款销售数量
          CancelRefundDataArrObj.CancelRefundDataArr.forEach((value, index, array)=>{
            if(index>=numArray[0] && index<=numArray[1]){
              CancelRefundAdd+=value;
            }
          });
          CancelRefundDataArrObj.CancelRefundDataArrNum.forEach((value, index, array)=>{
            if(index>=numArray[0] && index<=numArray[1]){
              CancelRefundNum+=value;
            }
          });
          if(numArray.length>0){
            self.$notify({
              title: '统计值',
              dangerouslyUseHTMLString: true,
              message: '<strong>总销售金额: <i>'+TotalAdd+'</i> 元</strong></br>' +
                '<strong>数量: <i>'+TotalNum+'</i> 盒</strong></br>' +
                '<strong>实际销售金额: <i>'+RealityAdd+'</i> 元</strong></br>' +
                '<strong>数量: <i>'+RealityNum+'</i> 盒</strong></br>' +
                '<strong>取消及退款金额: <i>'+CancelRefundAdd+'</i> 元</strong></br>' +
                '<strong>数量: <i>'+CancelRefundNum+'</i> 盒</strong></br>',
              offset: 100,
              duration:60000
            });
          }
        }


      },

官方实例地址

https://www.w3cschool.cn/echarts_tutorial/echarts_tutorial-si2c2de3.html

(欢迎大家评论和提供意见)

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 在 ECharts ,可以通过使用 `dataZoom` 组件来实现鼠标左键滑动拿到区域的功能。 `dataZoom` 是一个用于区域缩放和漫游的组件,可以让用户通过拖拽或滚轮来缩放或漫游图表。具体实现步骤如下: 1. 在 ECharts 引入 `dataZoom` 组件: ```javascript option = { ... dataZoom: { type: 'slider', // 缩放类型为滑动条 show: true, // 显示滑动条 start: 0, // 缩放开始位置 end: 100 // 缩放结束位置 }, ... }; ``` 2. 监听 `dataZoom` 组件的 `datazoom` 事件,获取到用户缩放的区域: ```javascript myChart.on('datazoom', function(params) { var start = params.start; // 获取缩放开始位置 var end = params.end; // 获取缩放结束位置 console.log(start, end); }); ``` 当用户拖动滑动条进行缩放时,`datazoom` 事件会被触发,通过获取 `params.start` 和 `params.end` 值,即可获取到用户缩放的区域。 需要注意的是,以上代码只是一个简单的示例,实际使用还需要根据具体需求进行适当的修改。 ### 回答2: ECharts是一款基于JavaScript的数据可视化库,可以用于创建交互式的图表和地图。要实现鼠标左键滑动来获取区域,可以通过ECharts提供的事件监听和交互功能来完成。 首先,在创建ECharts图表时,需要设置相应的配置项以启用鼠标交互功能。可以使用以下代码创建一个基本的图表实例: ```javascript var myChart = echarts.init(document.getElementById('chart')); var option = { // 其他图表配置项... // 启用鼠标交互功能 toolbox: { feature: { dataZoom: { type: 'inside' }, brush: { type: 'x', title: { rect: '选择区域', keep: '保持选择区域' } } } }, // 其他图表数据... }; myChart.setOption(option); ``` 上述代码的`option`对象的`toolbox`配置项设置了两种交互工具:`dataZoom`用于缩放和平移,`brush`用于选择区域。`brush`工具的`type: 'x'`表示只在水平方向上选择区域。 接下来,可以监听`brushSelected`事件来获取鼠标左键滑动选择区域。可以使用以下代码添加事件监听: ```javascript myChart.on('brushSelected', function (params) { var selectedData = []; // 遍历图表选择区域 echarts.util.each(params.batch[0].selected, function (dataIndex) { var values = myChart.getModel().getSeriesByIndex(0).getData().getValues(dataIndex); // 将选的数据保存到一个数组 selectedData.push({ x: values[0], y: values[1] }); }); // 打印选的数据 console.log(selectedData); }); ``` 上述代码,`brushSelected`事件的`params`参数包含了被选择区域的信息。通过遍历`params.batch[0].selected`数组,可以获取选的数据在数据集的索引。然后,可以通过调用`myChart.getModel().getSeriesByIndex(0).getData().getValues(dataIndex)`方法,获取选数据的具体数值。 最后,可以将选的数据保存到一个数组,或者执行其他相关操作。以上就是使用ECharts实现鼠标左键滑动获取区域的基本方法。 ### 回答3: echarts是一款强大的数据可视化库,可以用于创建各种图表。要实现鼠标左键滑动拿到区域,可以结合echarts的事件和工具箱功能来实现。 首先,在初始化echarts图表时,需要开启工具箱(toolbox)的启用Brush选框缩放功能。可以通过配置项的toolbox属性来实现,将该属性设置为true即可。 其次,通过监听echartsbrushSelected事件,可以获取到用户选择区域信息。这个事件会在用户拖动或缩放brush选框时触发,可以获取到选区域的具体范围。 具体实现步骤如下: 1. 引入echarts库和相关依赖文件。 2. 创建一个DOM元素,作为echarts图表的容器。 3. 初始化echarts图表,配置相应的图表类型和数据。 4. 在echarts初始化完成后,通过option的toolbox属性开启Brush选框缩放功能,并设置选择范围为矩形。 5. 监听brushSelected事件,该事件会在用户拖动或缩放brush选框时触发。事件回调函数可以获取到选区域的具体范围。 6. 在brushSelected事件回调函数,根据选区域的范围,可以进行相应的操作。比如可以通过获取选区域的起始点和终点坐标,来获取选区域的数据。 示例代码如下: ```javascript // 引入echarts库和相关依赖文件 import * as echarts from 'echarts'; import 'echarts/extension/bmap/bmap'; // 创建一个DOM元素,作为echarts图表的容器 const chartContainer = document.getElementById('chart'); // 初始化echarts图表,配置相应的图表类型和数据 const myChart = echarts.init(chartContainer); const option = { // 设置图表类型和数据 ... // 开启Brush选框缩放功能,并设置选择范围为矩形 toolbox: { feature: { brush: { type: ['rect'] } } }, }; // 监听brushSelected事件,获取选区域的范围 myChart.on('brushSelected', function(params) { // 获取选区域的范围 const selectedArea = params.batch[0].areas[0]; // 根据选区域的范围进行相应的操作 // 获取选区域的起始点和终点坐标 const startPoint = selectedArea.coordRange[0]; const endPoint = selectedArea.coordRange[1]; // 根据起始点和终点坐标,获取选区域的数据 const selectedData = getDataInRange(startPoint, endPoint); // 对选区域的数据进行处理或展示 ... }); // 渲染echarts图表 myChart.setOption(option); ``` 通过上述步骤,可以实现在echarts图表上使用鼠标左键滑动来获取选区域的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值