课程表

Echarts 基础教程

Echarts 案例教程

工具箱
速查手册

Echarts 图表交互组件

当前位置:免费教程 » JS/JS库/框架 » Echarts

除了图表外 ECharts 中,提供了很多交互组件。例如:

图例组件 legend、标题组件 title、视觉映射组件 visualMap、数据区域缩放组件 dataZoom、时间线组件 timeline

下面以 数据区域缩放组件 dataZoom 为例,介绍如何加入这种组件。


数据区域缩放组件(dataZoom)介绍

『概览数据整体,按需关注数据细节』是数据可视化的基本交互需求。dataZoom 组件能够在直角坐标系(grid)、极坐标系(polar)中实现这一功能。

如下例子:

  1. var data1 = [];
  2. var data2 = [];
  3. var data3 = [];
  4.  
  5. var random = function (max) {
  6.     return (Math.random() * max).toFixed(3);
  7. };
  8.  
  9. for (var i = 0; i < 500; i++) {
  10.     data1.push([random(15), random(10), random(1)]);
  11.     data2.push([random(10), random(10), random(1)]);
  12.     data3.push([random(15), random(10), random(1)]);
  13. }
  14.  
  15. option = {
  16.     animation: false,
  17.     legend: {
  18.         data: ['scatter', 'scatter2', 'scatter3']
  19.     },
  20.     tooltip: {
  21.     },
  22.     xAxis: {
  23.         type: 'value',
  24.         min: 'dataMin',
  25.         max: 'dataMax',
  26.         splitLine: {
  27.             show: true
  28.         }
  29.     },
  30.     yAxis: {
  31.         type: 'value',
  32.         min: 'dataMin',
  33.         max: 'dataMax',
  34.         splitLine: {
  35.             show: true
  36.         }
  37.     },
  38.     dataZoom: [
  39.         {
  40.             type: 'slider',
  41.             show: true,
  42.             xAxisIndex: [0],
  43.             start: 1,
  44.             end: 35
  45.         },
  46.         {
  47.             type: 'slider',
  48.             show: true,
  49.             yAxisIndex: [0],
  50.             left: '93%',
  51.             start: 29,
  52.             end: 36
  53.         },
  54.         {
  55.             type: 'inside',
  56.             xAxisIndex: [0],
  57.             start: 1,
  58.             end: 35
  59.         },
  60.         {
  61.             type: 'inside',
  62.             yAxisIndex: [0],
  63.             start: 29,
  64.             end: 36
  65.         }
  66.     ],
  67.     series: [
  68.         {
  69.             name: 'scatter',
  70.             type: 'scatter',
  71.             itemStyle: {
  72.                 normal: {
  73.                     opacity: 0.8
  74.                 }
  75.             },
  76.             symbolSize: function (val) {
  77.                 return val[2] * 40;
  78.             },
  79.             data: data1
  80.         },
  81.         {
  82.             name: 'scatter2',
  83.             type: 'scatter',
  84.             itemStyle: {
  85.                 normal: {
  86.                     opacity: 0.8
  87.                 }
  88.             },
  89.             symbolSize: function (val) {
  90.                 return val[2] * 40;
  91.             },
  92.             data: data2
  93.         },
  94.         {
  95.             name: 'scatter3',
  96.             type: 'scatter',
  97.             itemStyle: {
  98.                 normal: {
  99.                     opacity: 0.8,
  100.                 }
  101.             },
  102.             symbolSize: function (val) {
  103.                 return val[2] * 40;
  104.             },
  105.             data: data3
  106.         }
  107.     ]
  108. }

在线运行实例

  • dataZoom 组件是对 数轴(axis) 进行『数据窗口缩放』『数据窗口平移』操作。

可以通过 dataZoom.xAxisIndex 或 dataZoom.yAxisIndex 来指定 dataZoom 控制哪个或哪些数轴。

  • dataZoom 组件可同时存在多个,起到共同控制的作用。控制同一个数轴的组件,会自动联动。下面例子中会详细说明。

  • dataZoom 的运行原理是通过『数据过滤』来达到『数据窗口缩放』的效果。

    数据过滤模式的设置不同,效果也不同,参见:dataZoom.filterMode。

  • dataZoom 的数据窗口范围的设置,目前支持两种形式:

    • 百分比形式:参见 dataZoom.start 和 dataZoom.end。

    • 绝对数值形式:参见 dataZoom.startValue 和 dataZoom.endValue。

dataZoom 组件现在支持几种子组件:

  • 内置型数据区域缩放组件(dataZoomInside):内置于坐标系中。

  • 滑动条型数据区域缩放组件(dataZoomSlider):有单独的滑动条操作。

  • 框选型数据区域缩放组件(dataZoomSelect):全屏的选框进行数据区域缩放。入口和配置项均在 toolbox中。


在代码加入 dataZoom 组件

先只在对单独一个横轴,加上 dataZoom 组件,代码示例如下:

  1. option = {
  2.     xAxis: {
  3.         type: 'value'
  4.     },
  5.     yAxis: {
  6.         type: 'value'
  7.     },
  8.     dataZoom: [
  9.         {   // 这个dataZoom组件,默认控制x轴。
  10.             type: 'slider', // 这个 dataZoom 组件是 slider 型 dataZoom 组件
  11.             start: 10,      // 左边在 10% 的位置。
  12.             end: 60         // 右边在 60% 的位置。
  13.         }
  14.     ],
  15.     series: [
  16.         {
  17.             type: 'scatter', // 这是个『散点图』
  18.             itemStyle: {
  19.                 opacity: 0.8
  20.             },
  21.             symbolSize: function (val) {
  22.                 return val[2] * 40;
  23.             },
  24.             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"]]
  25.         }
  26.     ]}

在线运行实例

上面的图只能拖动 dataZoom 组件导致窗口变化。如果想在坐标系内进行拖动,以及用滚轮(或移动触屏上的两指滑动)进行缩放,那么要再加上一个 inside 型的 dataZoom组件。直接在上面的 option.dataZoom 中增加即可:

  1. option = {
  2.     ...,
  3.     dataZoom: [
  4.         {   // 这个dataZoom组件,默认控制x轴。
  5.             type: 'slider', // 这个 dataZoom 组件是 slider 型 dataZoom 组件
  6.             start: 10,      // 左边在 10% 的位置。
  7.             end: 60         // 右边在 60% 的位置。
  8.         },
  9.         {   // 这个dataZoom组件,也控制x轴。
  10.             type: 'inside', // 这个 dataZoom 组件是 inside 型 dataZoom 组件
  11.             start: 10,      // 左边在 10% 的位置。
  12.             end: 60         // 右边在 60% 的位置。
  13.         }
  14.     ],
  15.     ...}

在线运行实例

如果想 y 轴也能够缩放,那么在 y 轴上也加上 dataZoom 组件:

  1. option = {
  2.     ...,
  3.     dataZoom: [
  4.         {
  5.             type: 'slider',
  6.             xAxisIndex: 0,
  7.             start: 10,
  8.             end: 60
  9.         },
  10.         {
  11.             type: 'inside',
  12.             xAxisIndex: 0,
  13.             start: 10,
  14.             end: 60
  15.         },
  16.         {
  17.             type: 'slider',
  18.             yAxisIndex: 0,
  19.             start: 30,
  20.             end: 80
  21.         },
  22.         {
  23.             type: 'inside',
  24.             yAxisIndex: 0,
  25.             start: 30,
  26.             end: 80
  27.         }
  28.     ],
  29.     ...}

在线运行实例


转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号