框选型数据区域缩放组件(dataZoomSelect)
下面解析dataZoom-inside的部分常用属性:
dataZoom-inside. type = ‘inside’
dataZoom-inside. id
dataZoom-inside. disabled
dataZoom-inside. xAxisIndexnumberArray
例如有如下 ECharts option:
option: {
xAxis: [
{...}, // 第一个 xAxis
{...}, // 第二个 xAxis
{...}, // 第三个 xAxis
{...} // 第四个 xAxis
],
dataZoom: [
{ // 第一个 dataZoom 组件
xAxisIndex: [0, 2] // 表示这个 dataZoom 组件控制 第一个 和 第三个 xAxis
},
{ // 第二个 dataZoom 组件
xAxisIndex: 3 // 表示这个 dataZoom 组件控制 第四个 xAxis
}
]
}
dataZoom-inside. yAxisIndexnumberArray
dataZoom-inside. filterMode = ‘filter’
如何设置,由用户根据场景和需求自己决定。经验来说:
下面是个具体例子:
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]
]
}
}
上例中,dataZoomX 的 filterMode 设置为 'filter'。于是,假设当用户拖拽 dataZoomX(不去动 dataZoomY)导致其 valueWindow 变为 [2, 50] 时,dataZoomX 对 series.data 的第一列进行遍历,窗口外的整项去掉,最终得到的 series.data 为:
[
// 第一列对应 X 轴,第二列对应 Y 轴。
[12, 24, 36],
// [90, 80, 70] 整项被过滤掉,因为 90 在 dataWindow 之外。
[3, 9, 27]
// [1, 11, 111] 整项被过滤掉,因为 1 在 dataWindow 之外。
]
过滤前,series.data 中对应 Y 轴的值有 24、80、9、11,过滤后,只剩下 24 和 9,那么 Y 轴的显示范围就会自动改变以适应剩下的这两个值的显示(如果 Y 轴没有被设置 min、max 固定其显示范围的话)。
所以,filterMode: 'filter' 的效果是:过滤数据后使另外的轴也能自动适应当前数据的范围。
再从头来,上例中 dataZoomY 的 filterMode 设置为 'empty'。于是,假设当用户拖拽 dataZoomY(不去动 dataZoomX)导致其 dataWindow 变为 [10, 60] 时,dataZoomY 对 series.data 的第二列进行遍历,窗口外的值被设置为 empty (即替换为 NaN,这样设置为空的项,其所对应柱形,在 X 轴还有占位,只是不显示出来)。最终得到的 series.data 为:
[
// 第一列对应 X 轴,第二列对应 Y 轴。
[12, 24, 36],
[90, NaN, 70], // 设置为 empty (NaN)
[3, NaN, 27], // 设置为 empty (NaN)
[1, 11, 111]
]
这时,series.data 中对应于 X 轴的值仍然全部保留不受影响,为 12、90、3、1。那么用户对 dataZoomY 的拖拽操作不会影响到 X 轴的范围。这样的效果,对于离群点(outlier)过滤功能,比较清晰。
如下面的例子:
myChart.showLoading();
$.get(ROOT_PATH + '/data/asset/data/obama_budget_proposal_2012.list.json', function (obama_budget_2012) {
myChart.hideLoading();
option = {
tooltip : {
trigger: 'item'
},
legend: {
data: ['Growth', 'Budget 2011', 'Budget 2012'],
itemGap: 5
},
grid: {
top: '12%',
left: '1%',
right: '10%',
containLabel: true
},
xAxis: [
{
type : 'category',
data : obama_budget_2012.names
}
],
yAxis: [
{
type : 'value',
name : 'Budget (million USD)',
axisLabel: {
formatter: function (a) {
a = +a;
return isFinite(a)
? echarts.format.addCommas(+a / 1000)
: '';
}
}
}
],
dataZoom: [
{
type: 'slider',
show: true,
start: 94,
end: 100,
handleSize: 8
},
{
type: 'inside',
start: 94,
end: 100
},
{
type: 'slider',
show: true,
yAxisIndex: 0,
filterMode: 'empty',
width: 12,
height: '70%',
handleSize: 8,
showDataShadow: false,
left: '93%'
}
],
series : [
{
name: 'Budget 2011',
type: 'bar',
data: obama_budget_2012.budget2011List
},
{
name: 'Budget 2012',
type: 'bar',
data: obama_budget_2012.budget2012List
}
]
};
myChart.setOption(option);
});
dataZoom-inside. start
dataZoom-inside. end = 100
dataZoom-inside. startValuenumberstringDate
dataZoom-inside. endValuenumberstringDate
dataZoom-inside. rangeModeArray
例如 rangeMode: [‘value’, ‘percent’],表示 start 值取绝对数值,end 取百分比。
举例一个使用场景:当我们使用动态数据时(即,周期性得通过 setOption 来改变数据),如果 rangeMode 在 ‘value’ 模式,dataZoom 的窗口会一直保持在一个固定的值区间,无论数据怎么改变添加了多少;如果 rangeMode 在 ‘percent’ 模式,窗口会随着数据的添加而改变(假设 axis.min 和 axis.max 没有被设置)。
dataZoom-inside. zoomOnMouseWheel = true
dataZoom-inside. moveOnMouseWheel = true
dataZoom-inside. preventDefaultMouseMove = true
评论区(0)