项目场景:

使用第三方插件建立一个无限级目录的折线树图。

一、ECharts是什么?

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

二、为什么使用ECharts?

ECharts的优点:

(1)丰富的可视化类型

        ECharts 提供了常规的折线图柱状图散点图饼图K线图,用于统计的盒形图,用于地理数据可视化的地图热力图线图,用于关系数据可视化的关系图treemap旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图仪表盘,并且支持图与图之间的混搭。

(2)多种数据格式无需转换直接使用

        ECharts 内置的 dataset 属性(4.0+)支持直接传入包括二维表,key-value 等多种格式的数据源,通过简单的设置 encode 属性就可以完成从数据到图形的映射,这种方式更符合可视化的直觉,省去了大部分场景下数据转换的步骤,而且多个组件能够共享一份数据而不用克隆。

(3)千万数据的前端展现

        通过增量渲染技术(4.0+),配合各种细致的优化,ECharts 能够展现千万级的数据量,并且在这个数据量级依然能够进行流畅的缩放平移等交互。

以上是 ECharts优点的一部分,若想具体了解,可到官方手册的特性介绍查看,网址:特性 - Apache ECharts

二、使用步骤

1.获取 Apache ECharts

从 npm 获取:

npm install echarts --save

从 GitHub 获取:

apache/echarts 项目的 release 页面可以找到各个版本的链接。点击下载页面下方 Assets 中的 Source code,解压后 dist 目录下的 echarts.js 即为包含完整 ECharts 功能的文件。

2.引入 ECharts 文件

代码如下(示例):

<script src="./plugins/echarts/dist/echarts.min.js"></script>

3.设置一个容器

代码如下(示例):

<style>
    #frame{
        width: 79.8%;
        height: 750px;
        border: 1px solid #E1E1E1;
        float: left;
        border-left: 0;
        /*体系图的背景图修改为相应路径*/
        background-image: url("./plugins/echarts/img/1.png");
        background-repeat: no-repeat;
        background-size:100% 100%;
    }
    #container{
        float: left;
        border-left: 0;
        overflow:auto;
        width: 100%;
        height: 700px ;
    }
</style>
<div id="frame">
    <!--layui框架的固定块-->
    <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
        <legend style="margin-left: -44%">文件体系图</legend>
    </fieldset>
    <!--ECharts的容器-->
    <div id="container"></div>
</div>

4.核心配置

代码如下(示例):

<script type="text/javascript">
    //官方数据请求路径
    const ROOT_PATH = 'https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/examples';
    //获取存储div
    const chartDom = document.getElementById('container');
    const myChart = echarts.init(chartDom);
    let option;
    //显示Loading标志; var myChart = echarts.init(document.getElementById('页面中div的id'));
    myChart.showLoading();
    //官方数据请求路径
    //$.get(ROOT_PATH + '/data/asset/data/flare.json', function (data) {
    $.getJSON("{url:/document_revision/echarts_ajax}",{status:1}, function (data) {
        //得到数据后隐藏Loading标志
        myChart.hideLoading();
        echarts.util.each(data.children, function (datum, index) {
        //间隔展开子数据,animate,display,physics,scale,vis是展开的
        index % 1 ===1  && (datum.collapsed = true);
        //只展开第一层
        //datum.collapsed = true;
    });
    myChart.setOption(
        option = {
            //提示框组件
                tooltip: {
                    //触发类型,默认:item(数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用)。可选:'axis':坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。'none':什么都不触发。
                    trigger: 'item',
                    //提示框触发的条件,默认mousemove|click(鼠标点击和移动时触发)。可选mousemove:鼠标移动时,click:鼠标点击时,none:
                    triggerOn: 'mousemove'
                 },
                 //系列列表
                 series: [{
                     //树形结构
                     type: 'tree',
                     //开启鼠标缩放和平移漫游
                     roam:true,
                     //id: 0,
                     //上面从flare.json中得到的数据
                     data: [data],
                     //距离上
                     top: '1%',
                     //左
                     left: '7%',
                     //下
                     bottom: '1%',
                     //右的距离
                     right: '20%',
                     //直线树状图(存在缺陷,官网示例也是如此)
                     //控制是否为折线
                     edgeShape: 'polyline',
                     //径向树状图
                     //layout: 'radial',
                     symbol: 'emptyCircle',
                     //从上到下
                     //orient: 'vertical',
                     edgeForkPosition: '90%',
                     itemStyle:{
                         //颜色
                         //color:'red',
                         //圆点的线条类型 solid 实线 dashed 虚线 dotted 虚线(频度偏小)
                         borderType:'solid',
                     },
                     lineStyle: {
                         //线条粗细
                         width: 2
                     },
                     //标记的大小,就是那个小圆圈,默认7
                     symbolSize: 11,
                     //每个节点所对应的标签的样式
                     label: {
                         shadowColor:'transparent',
                         borderType:'dashed',
                         normal: {
                             //标签的位置
                             position: 'left',
                             //文字垂直对齐方式,默认自动。可选:top,middle,bottom
                             verticalAlign: 'middle',
                             //文字水平对齐方式,默认自动。可选:top,center,bottom
                             align: 'right',
                             //标签文字大小
                             fontSize: 13
                          }
                       },
                       //叶子节点的特殊配置,如上面的树图示例中,叶子节点和非叶子节点的标签位置不同
                       leaves: {
                          label: {
                              normal: {
                                  position: 'right',
                                      verticalAlign: 'middle',
                                      align: 'left'
                                  }
                              }
                          },
                          //子树折叠和展开的交互,默认打开
                          expandAndCollapse: true,
                          //树图初始展开的层级(深度)
                          initialTreeDepth : 2,
                          //初始动画的时长,支持回调函数,默认1000
                          animationDuration: 1550,
                          //数据更新动画的时长,默认300
                          animationDurationUpdate: 750
                      }]
                 }
            );
      });
     //渲染数据
     option && myChart.setOption(option);
</script>

效果图

smartTable android 折线图 折线图echarts_javascript

意外问题描述:

在使用折线树图时,发现收缩展开几次后,会出现乱版现象,到官网查看示例,亦是如此,如下图:

网址:Examples - Apache ECharts

smartTable android 折线图 折线图echarts_数据可视化_02

 解决方案:乱版是最新的几个版本才出现的(官网案例出错版本号:5.2.1,5.2.0两个版本),在以前的版本并没有乱版问题,下载的除这两个之外的版本即可。