echarts实现数据区域缩放

在实际项目中经常会碰到 数据量大,数据区域广 时数据显示问题。而在交互组件中dataZoom可以帮我们实现对数据区域的缩放
以下是dataZoom的属性

dataZoom=[                                      //区域缩放
    {
        id: 'dataZoomX',
        show:true,                              //是否显示 组件。如果设置为 false,不会显示,但是数据过滤的功能还存在。
        backgroundColor:"rgba(47,69,84,0)",  //组件的背景颜色
        type: 'slider',                         //slider表示有滑动块的,inside表示内置的
        dataBackground:{                        //数据阴影的样式。
            lineStyle:mylineStyle,              //阴影的线条样式
            areaStyle:myareaStyle,              //阴影的填充样式
        },
        fillerColor:"rgba(167,183,204,0.4)",  //选中范围的填充颜色。
        borderColor:"#ddd",                     //边框颜色。
        filterMode: 'filter',                   //'filter':当前数据窗口外的数据,被 过滤掉。即 会 影响其他轴的数据范围。每个数据项,只要有一个维度在数据窗口外,整个数据项就会被过滤掉。
                                                  //'weakFilter':当前数据窗口外的数据,被 过滤掉。即 会 影响其他轴的数据范围。每个数据项,只有当全部维度都在数据窗口同侧外部,整个数据项才会被过滤掉。
                                                  //'empty':当前数据窗口外的数据,被 设置为空。即 不会 影响其他轴的数据范围。
                                                  //'none': 不过滤数据,只改变数轴范围。
        xAxisIndex:0,                            //设置 dataZoom-inside 组件控制的 x轴,可以用数组表示多个轴
        yAxisIndex:[0,2],                        //设置 dataZoom-inside 组件控制的 y轴,可以用数组表示多个轴
        radiusAxisIndex:3,                       //设置 dataZoom-inside 组件控制的 radius 轴,可以用数组表示多个轴
        angleAxisIndex:[0,2],                    //设置 dataZoom-inside 组件控制的 angle 轴,可以用数组表示多个轴
        start: 30,                                //数据窗口范围的起始百分比,表示30%
        end: 70,                                  //数据窗口范围的结束百分比,表示70%
        startValue:10,                           //数据窗口范围的起始数值
        endValue:100,                            //数据窗口范围的结束数值。
        orient:"horizontal",                    //布局方式是横还是竖。不仅是布局方式,对于直角坐标系而言,也决定了,缺省情况控制横向数轴还是纵向数轴。'horizontal':水平。'vertical':竖直。
        zoomLock:false,                          //是否锁定选择区域(或叫做数据窗口)的大小。如果设置为 true 则锁定选择区域的大小,也就是说,只能平移,不能缩放。
        throttle:100,                             //设置触发视图刷新的频率。单位为毫秒(ms)。
        zoomOnMouseWheel:true,                  //如何触发缩放。可选值为:true:表示不按任何功能键,鼠标滚轮能触发缩放。false:表示鼠标滚轮不能触发缩放。'shift':表示按住 shift 和鼠标滚轮能触发缩放。'ctrl':表示按住 ctrl 和鼠标滚轮能触发缩放。'alt':表示按住 alt 和鼠标滚轮能触发缩放。
        moveOnMouseMove:true,                   //如何触发数据窗口平移。true:表示不按任何功能键,鼠标移动能触发数据窗口平移。false:表示鼠标滚轮不能触发缩放。'shift':表示按住 shift 和鼠标移动能触发数据窗口平移。'ctrl':表示按住 ctrl 和鼠标移动能触发数据窗口平移。'alt':表示按住 alt 和鼠标移动能触发数据窗口平移。
        left:"center",                           //组件离容器左侧的距离,'left', 'center', 'right','20%'
        top:"top",                                //组件离容器上侧的距离,'top', 'middle', 'bottom','20%'
        right:"auto",                             //组件离容器右侧的距离,'20%'
        bottom:"auto",                            //组件离容器下侧的距离,'20%'
 
    },
    {
        id: 'dataZoomY',
        type: 'inside',
        filterMode: 'empty',
        disabled:false,                         //是否停止组件的功能。
        xAxisIndex:0,                           //设置 dataZoom-inside 组件控制的 x轴,可以用数组表示多个轴
        yAxisIndex:[0,2],                       //设置 dataZoom-inside 组件控制的 y轴,可以用数组表示多个轴
        radiusAxisIndex:3,                      //设置 dataZoom-inside 组件控制的 radius 轴,可以用数组表示多个轴
        angleAxisIndex:[0,2],                   //设置 dataZoom-inside 组件控制的 angle 轴,可以用数组表示多个轴
        start: 30,                               //数据窗口范围的起始百分比,表示30%
        end: 70,                                  //数据窗口范围的结束百分比,表示70%
        startValue:10,                           //数据窗口范围的起始数值
        endValue:100,                            //数据窗口范围的结束数值。
        orient:"horizontal",                    //布局方式是横还是竖。不仅是布局方式,对于直角坐标系而言,也决定了,缺省情况控制横向数轴还是纵向数轴。'horizontal':水平。'vertical':竖直。
        zoomLock:false,                          //是否锁定选择区域(或叫做数据窗口)的大小。如果设置为 true 则锁定选择区域的大小,也就是说,只能平移,不能缩放。
        throttle:100,                             //设置触发视图刷新的频率。单位为毫秒(ms)。
        zoomOnMouseWheel:true,                   //如何触发缩放。可选值为:true:表示不按任何功能键,鼠标滚轮能触发缩放。false:表示鼠标滚轮不能触发缩放。'shift':表示按住 shift 和鼠标滚轮能触发缩放。'ctrl':表示按住 ctrl 和鼠标滚轮能触发缩放。'alt':表示按住 alt 和鼠标滚轮能触发缩放。
        moveOnMouseMove:true,                    //如何触发数据窗口平移。true:表示不按任何功能键,鼠标移动能触发数据窗口平移。false:表示鼠标滚轮不能触发缩放。'shift':表示按住 shift 和鼠标移动能触发数据窗口平移。'ctrl':表示按住 ctrl 和鼠标移动能触发数据窗口平移。'alt':表示按住 alt 和鼠标移动能触发数据窗口平移。
    }
]

我们可以通过一个例子来分析数据缩放
1.data有三个属性[m,n,k]
m代表x轴 n代表y轴 k代表样本大小(可以通过半径直观反映)
2.dataZoom数据窗口范围设置(两种方式 百分比与起始结束数值)
start: 30, //数据窗口范围的起始百分比,表示30%
end: 70, //数据窗口范围的结束百分比,表示70%
startValue:10, //数据窗口范围的起始数值
endValue:100, //数据窗口范围的结束数值。
3.slide.left 为滑动组件里容器左侧距离
可以是相对容器的百分比,也可以是left center right对齐。
4.xAxis x轴,yAxis y轴


控制x轴
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        var data1 = [];
        var data2 = [];
        var data3 = [];

        var random = function (max) {
            return (Math.random() * max).toFixed(3);
        };

//          data1.push([10,5,0.5]);
        for (var i = 0; i < 500; i++) {
            data1.push([random(15), random(10), random(1)]);
            data2.push([random(10), random(10), random(1)]);
            data3.push([random(15), random(10), random(1)]);
        }

        option = {
            animation: false,
            legend: {
                data: ['scatter', 'scatter2', 'scatter3']
            },
            tooltip: {
            },
            xAxis: {
                type: 'value',
                min: 'dataMin',
                max: 'dataMax',
                splitLine: {
                    show: true
                }
            },
            yAxis: {
                type: 'value',
                min: 'dataMin',
                max: 'dataMax',
                splitLine: {
                    show: true
                }
            },
            dataZoom: [
                {
                    type: 'slider',
                    show: true,
                    xAxisIndex: [0],
                    start: 1,
                    end: 35
                },
                {
                    type: 'slider',
                    show: true,
                    yAxisIndex: [0],
                    left: '93%',
                    start: 29,
                    end: 36
                },
                {
                    type: 'inside',
                    xAxisIndex: [0],
                    start: 1,
                    end: 35
                },
                {
                    type: 'inside',
                    yAxisIndex: [0],
                    start: 29,
                    end: 36
                }
            ],
            series: [
                {
                    name: 'scatter',
                    type: 'scatter',
                    itemStyle: {
                        normal: {
                            opacity: 0.8
                        }
                    },
                    symbolSize: function (val) {
                        return val[2] * 40;
                    },
                    data: data1
                },
                {
                    name: 'scatter2',
                    type: 'scatter',
                    itemStyle: {
                        normal: {
                            opacity: 0.8
                        }
                    },
                    symbolSize: function (val) {
                        return val[2] * 40;
                    },
                    data: data2
                },
                {
                    name: 'scatter3',
                    type: 'scatter',
                    itemStyle: {
                        normal: {
                            opacity: 0.8,
                        }
                    },
                    symbolSize: function (val) {
                        return val[2] * 40;
                    },
                    data: data3
                }
            ]
        }
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
数据缩放图

将x轴展示域缩小y轴展示域放大效果图
  1. type: 'inside' 为内置控件可通过滑轮放大缩小
    type:'slider'为外部滑动控件,需要通过鼠标拖拽滑动块
    inside
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option = {
                xAxis: {
                    type: 'value'
                },
                yAxis: {
                    type: 'value'
                },
                dataZoom: [
//                         {   // 这个dataZoom组件,默认控制x轴。
//                             type: 'slider', // 这个 dataZoom 组件是 slider 型 dataZoom 组件
//                             start: 10,      // 左边在 10% 的位置。
//                             end: 60         // 右边在 60% 的位置。
//                         },
                           {   // 这个dataZoom组件,也控制x轴。
                               type: 'inside', // 这个 dataZoom 组件是 inside 型 dataZoom 组件
                               start: 10,      // 左边在 10% 的位置。
                               end: 60         // 右边在 60% 的位置。
                           },
//                         {
//                             type: 'slider',
//                             yAxisIndex: 0,
//                             start: 30,
//                             end: 80
//                         },
                           {
                               type: 'inside',
                               yAxisIndex: 0,
                               start: 30,
                               end: 80
                           }

                       ],

                series: [
                         {
                             type: 'scatter', // 这是个『散点图』
                             itemStyle: {
                                 normal: {
                                     opacity: 0.8
                                 }
                             },
                             symbolSize: function (val) {
                                 return val[2] * 40;
//                              return 40;
                             },
                             data: [["14.616","7.241","0.896"],["3.958","5.701","0.955"],["2.768","8.971","0.669"],["9.051","9.710","0.171"],["14.046","4.182","0.536"],["12.295","1.429","0.962"],["4.417","8.167","0.113"],["0.492","4.771","0.785"],["7.632","2.605","0.645"],["14.242","5.042","0.368"]]
                         }
                     ]
                 }
        
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
inside内置

slider

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option = {
                xAxis: {
                    type: 'value'
                },
                yAxis: {
                    type: 'value'
                },
                dataZoom: [
                           {   // 这个dataZoom组件,默认控制x轴。
                               type: 'slider', // 这个 dataZoom 组件是 slider 型 dataZoom 组件
                               start: 10,      // 左边在 10% 的位置。
                               end: 60         // 右边在 60% 的位置。
                           },
//                         {   // 这个dataZoom组件,也控制x轴。
//                             type: 'inside', // 这个 dataZoom 组件是 inside 型 dataZoom 组件
//                             start: 10,      // 左边在 10% 的位置。
//                             end: 60         // 右边在 60% 的位置。
//                         },
                           {
                               type: 'slider',
                               yAxisIndex: 0,
                               start: 30,
                               end: 80
                           },
//                         {
//                             type: 'inside',
//                             yAxisIndex: 0,
//                             start: 30,
//                             end: 80
//                         }

                       ],

                series: [
                         {
                             type: 'scatter', // 这是个『散点图』
                             itemStyle: {
                                 normal: {
                                     opacity: 0.8
                                 }
                             },
                             symbolSize: function (val) {
                                 return val[2] * 40;
//                              return 40;
                             },
                             data: [["14.616","7.241","0.896"],["3.958","5.701","0.955"],["2.768","8.971","0.669"],["9.051","9.710","0.171"],["14.046","4.182","0.536"],["12.295","1.429","0.962"],["4.417","8.167","0.113"],["0.492","4.771","0.785"],["7.632","2.605","0.645"],["14.242","5.042","0.368"]]
                         }
                     ]
                 }
        
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
slider外置滑块

dataZoom filterMode 数据过滤模式

filtermode参数

x轴改变影响y轴,y轴改变不影响x轴

x:filter y:empty

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option={
            dataZoom:[{

                id:'dataZoomX',
                type:'slider',
                xAxisIndex:[0],
                filterMode:'filter'
            },
            {
                id:'dataZoomY',
                type:'slider',
                yAxisIndex:[0],
                filterMode:'empty'
            }
        
        ],
        xAxis:{type:'value'},
        yAxis:{type:'value'},
        series:{
            type:'bar',
            data:[
                //第一列对应x轴,第二列对应y轴
                [12,24,36],
                [90,80,70],
                [3,9,27],
                [1,11,111]
            ]
        }
       } 
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>

x:0~100 ,y:0~80

调整x:0~50 使得y变为0~25

调整y:0~25 而x不变依旧为0~100

x轴改变影响y轴,y轴改变影响x轴

x:filter y:filter

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option={
            dataZoom:[{

                id:'dataZoomX',
                type:'slider',
                xAxisIndex:[0],
                filterMode:'filter'
            },
            {
                id:'dataZoomY',
                type:'slider',
                yAxisIndex:[0],
                filterMode:'filter'
            }
        
        ],
        xAxis:{type:'value'},
        yAxis:{type:'value'},
        series:{
            type:'bar',
            data:[
                //第一列对应x轴,第二列对应y轴
                [12,24,36],
                [90,80,70],
                [3,9,27],
                [1,11,111]
            ]
        }
       } 
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>

调整y:0~25 使得x变为0~12

x轴改变不影响y轴,y轴改变不影响x轴

x:empty y:empty

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option={
            dataZoom:[{

                id:'dataZoomX',
                type:'slider',
                xAxisIndex:[0],
                filterMode:'empty'
            },
            {
                id:'dataZoomY',
                type:'slider',
                yAxisIndex:[0],
                filterMode:'empty'
            }
        
        ],
        xAxis:{type:'value'},
        yAxis:{type:'value'},
        series:{
            type:'bar',
            data:[
                //第一列对应x轴,第二列对应y轴
                [12,24,36],
                [90,80,70],
                [3,9,27],
                [1,11,111]
            ]
        }
       } 
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
调整x:0~50 而y不变依旧为0~80

调整y:0~25 而x不变依旧为0~100

不过滤数据,不影响轴

x:none y:none

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option={
            dataZoom:[{
                id:'dataZoomX',
                type:'slider',
                xAxisIndex:[0],
                filterMode:'none'
            },
            {
                id:'dataZoomY',
                type:'slider',
                yAxisIndex:[0],
                filterMode:'none'
            }
        
        ],
        xAxis:{type:'value'},
        yAxis:{type:'value'},
        series:{
            type:'bar',
            data:[
                //第一列对应x轴,第二列对应y轴
                [12,24,36],
                [90,80,70],
                [3,9,27],
                [1,11,111]
            ]
        }
       } 
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
调整x:0~80 y:0~50 数据虽然超出数据窗口但是没有发生过滤

实际项目中经常会出现某项数值暂时不显示,但是也要留有位置

将y轴数据设置为NaN

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 echarts.js -->
    <script src="../js/echarts.min.js"></script>
     <script src="../js/jquery.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        option={
            dataZoom:[{
                id:'dataZoomX',
                type:'slider',
                xAxisIndex:[0],
                filterMode:'empty'
            },
            {
                id:'dataZoomY',
                type:'slider',
                yAxisIndex:[0],
                filterMode:'empty'
            }
        
        ],
        xAxis:{type:'value'},
        yAxis:{type:'value'},
        series:{
            type:'bar',
            data:[
                //第一列对应x轴,第二列对应y轴
                [12,24,36],
                [90,NaN,70],
                [3,NaN,27],
                [1,11,111]
            ]
        }
       } 
        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>
x轴仍有占位
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。