ECharts数据可视化:入门、实战与进阶
上QQ阅读APP看书,第一时间看更新

3.6 数据区域缩放

在ECharts中,数据区域缩放组件称为dataZoom,它的作用是向用户提供区域缩放的功能,使用户可以通过区域缩放概览数据的整体情况,也能关注数据的细节。

目前ECharts支持的区域缩放组件有如下几种:

▪ 滑动条型数据区域缩放组件(dataZoomSlider)

▪ 内置型数据区域缩放组件(dataZoomInside)

▪ 框选型数据区域缩放组件(dataZoomSelect)

1. 滑动条型数据区域缩放组件

滑动条型数据区域缩放组件比较常用的参数有以下几个。

1)xAxisIndex:指定控制的x轴。如果一个可视化中有多个图表,我们的区域缩放组件控制的是哪个轴呢?此时就需要指定这个参数的取值:如果取值是一个数字,则控制的是一个轴;如果取值是一个数组,那么控制的是多个轴。下面我们来看以下示例代码:


otion: {
    xAxis: [
        {...}, //第一个xAxis
        {...}, //第二个xAxis
        {...}, //第三个xAxis
        {...}  //第四个xAxis
    ],
    dataZoom: [
        { //第一个dataZoom组件
            xAxisIndex: [0, 3] //表示这个dataZoom组件控制第一个和第四个xAxis
        },
        { //第二个dataZoom组件
            xAxisIndex: 2      //表示这个dataZoom组件控制第三个xAxis
        }
    ]
}

此时第一个dataZoom组件控制的是第一个和第四个xAxis,而第二个dataZoom组件控制的是第三个xAxis。

除了xAxisIndex,也有yAxisIndex,用法类似,这里不再赘述。

2)filterMode:过滤模式,dataZoom数据窗口缩放的实质是数据过滤,即过滤掉窗口外的内容。

过滤模式有多种,常用可选值如下所示。

▪ filter:过滤窗口外的数据。当可视化有多个轴时,会影响其他轴的数据范围,对于数据,只要有一个维度在窗口外,就会被过滤掉。

▪ weakFilter:过滤窗口外的数据。当可视化有多个轴时,会影响其他轴的数据范围,对于数据,只有当其所有维度都在窗口同侧外,才会被过滤掉。

▪ empty:不会影响其他轴的数据范围。

▪ none:不过滤数据,只会改变数轴范围。

我们来看一个具体的例子,这里只设置了option:


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轴
            [10, 30],
            [20, 50],
            [5, 20],
            [2, 10]
        ]
    }
    }

结果如图3-9所示。

图3-9 过滤模式

从代码中可以看到,控制x轴的缩放模式为filter,控制y轴的缩放模式为empty,则x轴作为主轴,x的缩放会影响y轴数据,y轴作为辅助轴,y轴的缩放不会影响x轴的数据。可以随意拖动x轴或者y轴滑动条的两端,或是拖动滑动条,实现窗口数据缩放。

2. 内置型数据区域缩放组件

所谓内置,是指该区域缩放组件是内置在坐标系中的,其参数和上面提到的滑动条型数据区域缩放组件的参数基本一致。将上面代码中的slider类型改为inside类型,代码如下所示:


option = {
    dataZoom: [
        {
            id: 'dataZoomX',
            type: 'inside',
            xAxisIndex: [0],
            filterMode: 'inside'
        },
        {
            id: 'dataZoomY',
            type: 'inside',
            yAxisIndex: [0],
            filterMode: 'empty'
        }
    ],
    xAxis: {type: 'value'},
    yAxis: {type: 'value'},
    series:{
        type: 'bar',
        data: [
            //第一列对应X轴,第二列对应Y轴
            [10, 30],
            [20, 50],
            [5, 20],
            [2, 10]
        ]
    }
}

观察可视化结果,如图3-10所示。

图3-10 内置型数据区域缩放组件

将鼠标悬停在可视化区域,滚动鼠标滚轮,可以发现可视化数据窗口在变化,所谓内置,其实就是将缩放按键内置在图中,不显式地出现在我们视野中。

3. 框选型数据区域缩放组件

框选型,顾名思义,是通过选框来进行数据区域缩放,该组件在之前提到的toolbox中。下面我们来看个实例。

在之前讲解toolbox时的代码中的toolbox.feature下加入dataZoom : {show: true},为了看清楚toolbox,还要在toolbox下设置left : 'left',得到以下的option代码:


option = {
    title: {
        text: '这是主标题',
        subtext: '这是副标题',
        left: 'center'//居中显示
    },
    tooltip: {
        trigger: 'axis',
        axisPointer: {
            type: 'shadow'
        }
    },
    toolbox: {
        show : true,
        left : 'left',
        feature : {
            mark : {show: true},
            dataView : {show: true, readOnly: false},
            magicType: {show: true, type: ['line', 'bar']},
            restore : {show: true},
            saveAsImage : {show: true},
            dataZoom : {show: true}
        }
    },
    legend: {
        data:['各产品销量情况']
    },
    xAxis: {
        data: ["产品A","产品B","产品C","产品D","产品E"]
    },
    yAxis: {},
    series: [{
        name: '销量',
        type: 'bar',
        data: [900, 700, 550, 1000, 200]
    }]
};

观察可视化结果,如图3-11所示。

图3-11 框选型数据区域缩放组件

在左上角的toolbox工具箱中,多了两个按钮,分别是“区域缩放”和“区域缩放还原”(见图3-11中线框处),点击“区域缩放”按钮,在可视化图中划出一个区域,即可对数据进行缩放,点击“区域缩放还原”,可以清除缩放并还原到最初的可视化状态。