zoukankan      html  css  js  c++  java
  • echart入门一

    一. 基本概念

    1. 可视化工具

    在数据分析时代,不能仅仅依靠类似excel表格展现出数据的规律,所以需要另一种能将数据的特点更直观地体现出来的工具,甚至可以与用户交互。这种工具叫可视化工具,它能够把数据变成2D模型(折线图,柱状图...)或者3D 模型,这样这些看似杂乱无序数据就都变成清晰明了的统计结果了。

    ​ 所以利用可视化工具能做些什么:

    (1) 例如制作监控型报表,反应业务的实际情况,并且根据数据进行预测分析。

    (2)例如展示动态数据的更新,比如时间序列数据,动态路径数据等。

    2.当前的可视化工具

    百度的echart、蚂蚁金服G2(anv)、D3

    二. echart的基本概念

    这里只介绍2D的简单配置,掌握了基本思路,其他配置也大同小异。

    1.echart的基本组成

    echart 中的内容可以看作是一个个组件拼装起来,通过option这个字段将拼装的内容塞入echart的api渲染就行。

    比如折线图,折线图需要 'grid'坐标系,'yAxis'y轴,'xAxis'x轴,'series'系列(这里先看作一条线),

    假如要控制这条线的显示隐藏,我们需要额外的图例组件'legend' ,

    假如想要得到更详细的信息,在鼠标移到这条线的时候,希望有个气泡框能体现该接触点的信息,就是'tooltip'提示框组件。

    假如'xAxis'x轴数据量太大,我们希望看局部内容,可以用'dataZoom'数据区缩放组件。

    img

    有时候还需要调整组件的位置,left,right,height,bottom都是相对于dom容器,

    数值: left:130表示偏离dom容器左边130px;

    百分比:right: '30%表示偏离dom容器右边 ,宽度是dom容器宽度百分之40,height:'40%'是垂直方向的,所以是相对于容器高度

    img

    2.基本配置

    下面讲一下常用的直角坐标系图,比如折线图和柱状图相关的配置,首先将下面代码复制到下方链接的编辑框里面,这样进行参数的调配

    https://www.makeapie.com/editor.html?c=xZlbAmIwbc

    具体组件内容:两个直角坐标系,一个x轴,多个y轴,一个title, 有多少个series搭配多少个legend,一个dataZoom控制折线图和柱状图

    option = {
        title: {
            text: '{name|主标题} {val|演示}', // 文本内容
            left: 50, // 标题组件的位置
            textStyle: {
                rich: {
                    // 富文本的样式,可以配置对局样式
                    name: {
                        // 自定义字段
                        fontSize: 12,
                        color: 'black',
                    },
                    val: {
                        // 自定义字段
                        fontSize: 16,
                    },
                },
            },
        },
        grid: [
            {
                // 第一个坐标系
                height: 150,
            },
            {
                // 第二个坐标系,通过top和bottom自动计算出height
                top: 250,
                bottom: 50,
            },
        ],
        xAxis: [
            {
                gridIndex: 0, // 处于第一个坐标系
                // type: 'value' ,可以用min,max定义
                // type:'category',type的默认值,数据匹配顺序 当前的data > series.data/ dataset.source,
                data: ['a', 'b', 'c'], // 有data,默认type一定是category。 类目数据,在类目轴(type: 'category')中有效。不指明data会从series.data中获取
            },
            {
                gridIndex: 1, // 处于第2个坐标系
                data: ['a', 'b', 'c'], // 有data,默认type一定是category
            },
        ],
        yAxis: [
            {
                // type默认为value
                gridIndex: 0, // 处于第一个坐标系
                name: 'y1',
            },
            {
                // type默认为value
                gridIndex: 1, // 处于第二个坐标系
                name: 'y2',
            },
        ],
        series: [
            {
                name: '柱状图1', // 系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。
                data: [
                    150,
                    20,
                   224,
                ], // 作为y轴的数据
                type: 'bar',
                // itemStyle: {
                //   color: 'red' // 一般系列的样式会默认选取主题里面color的配置,
                //                如果这里定义了会影响到相关系列的颜色,比如legend的颜色
                //               然后legend里面有个itemStyle也可以重置这里设置的颜色,最后是legend的data字段里面的itemStye
                //    所以legend的颜色取色data的itemStyle > legend的itemStyle > series的itemStyle > 默认颜色
                // },
                xAxisIndex: 0,
                yAxisIndex: 0,
            },
            {
                name: '折线2',
                data: [150, 230, 224],
                type: 'line',
                xAxisIndex: 1,
                yAxisIndex: 1,
            },
        ],
        tooltip: {
            trigger: 'axis',
        },
        axisPointer: {
            //联系所有的x轴
            link: { xAxisIndex: 'all' },
        },
        legend: {
            padding: [0, 50], // 设置左右两边的边距为50,上下为0
            type: 'scroll', // 超出容器会使用隐藏,变成滚动状态
            // itemStyle: { // 针对所有legend样式设置
            //   color: 'blue'
            // },
            data: [
                // 如果需要自定义legend样式才用
                {
                    name: '柱状图1', // 匹配series中name为'柱状图'的系列
                    icon: 'rect',
                    // itemStyle: {} // 单个legend样式设置
                },
                {
                    name: '折线2', // 匹配series中name为'柱状图'的系列
                },
            ],
            formatter: (name) => {
                // 可以结合富文本
                return `{a|${name}}{b|随意}`; // es6模板字符串写法,即 'a{|'+name+'}'
            },
            textStyle: {
                rich: {
                    a: {
                        fontSize: 12,
                    },
                    b: {
                        fontSize: 20,
                    },
                },
            },
        },
        dataZoom: [
            // 放置多个dataZoom组件
            {
                xAxisIndex: [0, 1], // 控制第一和第二条x轴
                type: 'inside', // 表现形式为内置
                start: 0, // 一开始的数据范围起点百分比
                end: 100, // 一开始的数据范围起点百分比
                //  startValue:100/"xx"  绝对数值定义窗口范围,如果x轴的type为category,使用100会对应数组的index,"xx"也会自动转成数组index
                //  endValue:
                // 限制收缩的窗口的大小的最小和最大值
                minSpan: 0,
                maxSpan: 100,
                // 是否锁定选择区域(或叫做数据窗口)的大小。true只能平移
                // zoomLock: true
            },
            {
                xAxisIndex: 1, // 控制第三条x轴
                type: 'slider',
                // 这个属性  根据不同的场景(数据量小的时候让它false)进行切换
                show: true,
                // zoomLock: true
            },
        ],
    };
    

    总结一下常见的series.data和xAxis.data的对应

    // xAxis为value轴的时候
    xAxis: {
        type:"value",
        min: 1,
        max: 10
    }
    yAxis: {
        name:'y1'
    },
    series: [
        {
            type:"line",
           data: [[0,10],[1,20],[2,30]] // data:[[x维度,y维度]...],每一个[x维度,y维度]都是一个点的数据,[0,10]代表x轴为0,y轴为10的点
        }
    ]
    // xAxis为category轴的时候
    xAxis: {
        type:"category",
        data:["a","b","c"]
    }
    yAxis: {
        name:'y1'
    },
    series: [
        {
            type:"line",  
          /** 
          等同于data: [[0,10],[1,20],[2,30]] ,此时会与xAxis.data对应
          跟上面xAxis.type=value的时候也是data: [ [x维度,y维度]...]形式,每一个[x维度,y维度]代表一个点的数据
          但是这里的 x维度 意义不一样,
          xAxis为category轴时候,如果是数值,就匹配xAxis.data数组的索引,字符串会匹配xAxis.data数组的值。  
          xAxis为value轴的时候,x维度是代表x轴某个值
          所以 data: [10,20,30]可以写成data: [[0,10],[1,20],[2,30]]或者data: [['a',10],['b',20],['c',30]] 
          */
            data: [10,20,30] 
          
        }
    ]
    
    

    3.echart中的事件

    3.1 echart中的事件的类型

    (1)一种是用户的鼠标行为,点击click,双击dblclick,鼠标悬停mouseover等,具体事件看

    (2) 一种是与组件交互的行为,比如缩放dataZoom,会触发dataZoom事件,而代码中调用

    ​ dispatchAction({ type: 'dataZoom' ,start:0,end: 1})也会触发dataZoom事件

    3.2 如何监听

    chart.on(eventName, query, (params) => {});
    1. chart: echart实例
    2. eventName: click,dataZoom等
    3. query:只对指定的组件的图形元素的触发回调
    query可以为string或者object
    chart.on('click', 'series.line', function () {...});
    chart.on('mouseover', {seriesIndex: 1, name: 'xx'}, function () {
        // series index 1 的系列中的 name 为 'xx' 的元素被 'mouseover' 时,此方法被回调。
    });
    4. params:
    {
        // 当前点击的图形元素所属的组件名称,
        // 其值如 'series'、'markLine'、'markPoint'、'timeLine' 等。
        componentType: string,
        // 系列类型。值可能为:'line'、'bar'、'pie' 等。当 componentType 为 'series' 时有意义。
        seriesType: string,
        // 系列在传入的 option.series 中的 index。当 componentType 为 'series' 时有意义。
        seriesIndex: number,
        // 系列名称。当 componentType 为 'series' 时有意义。
        seriesName: string,
        // 数据名,类目名
        name: string,
        // 数据在传入的 data 数组中的 index
        dataIndex: number,
        value: number|Array
        ...
    }
    
  • 相关阅读:
    MySql索引
    HashMap 底层解析
    https超文本安全传输协议
    多线程
    过滤器和拦截器
    计算机操作系统
    计算机网络
    java线程内存模型JMM
    jvm
    数据库
  • 原文地址:https://www.cnblogs.com/listenMao/p/15056904.html
Copyright © 2011-2022 走看看