Echarts 数据可视化

1. Echarts 简介

  • Echarts 缩写来自 Enterprise Charts(商业级数据图表),是百度的一个开源的数据可视化工具
  • Echarts 能够绘制 2D 和 3D 的饼状图、柱状图、折线图等几乎所有我们能够见到的图形
  • Echarts 能够在 PC 端和移动设备上流畅运行,兼容当前绝大部分浏览器
  • Echarts 是一个纯 JavaScript 的图表库,底层依赖轻量级的 Canvas 库 ZRender
  • 官网: https://echarts.apache.org/zh/index.html

2. Echarts快速上手

使用步骤:

  1. 下载

  2. 复制/粘贴代码

  3. 代码分析

  4. 结论

实现:

1)下载

  • 从官网下载
  • npm 安装: npm i echarts
  • 按需定制

在这里插入图片描述
2) 复制代码 (5分钟上手 Echarts)

在这里插入图片描述
3) 分析代码

通过分析代码得出结论,使用 Echarts 绘制图形只需要做 5 件事情

① 引入 echarts.js 核心文件

② 定义一个用来显示图表的div (使用样式可以控制图表的宽高)

③ 初始化 echarts 实例 (此处要将div的dom对象作为参数传入)

④ 配置图表所需的数据

⑤ 调用 setOption 方法绘制图表

4)结论

  • Echarts 使用是比较简单的,按照固定的五个步骤来写即可
  • 想要产生不同的图表就需要不同的配置项,学习Echarts就是学习各种配置项
  • 不要死记配置项,要熟练使用文档

第四步配置数据项是最为关键的,要掌握里面的主要配置项

在这里插入图片描述

  • title: 标题组件,里面包含主标题、副标题等
  • xAxios: 坐标系的 x 轴
  • yAxios: 坐标系的 y 轴
  • legend: 图例组件,用于展现不同系列的标记、颜色和名字
  • series: 系列列表,配置具体的图标类型、数据等
  • 配置项知道的越多越好,但是不要死记硬背,要学会使用文档

3. 柱状图

3.1 柱状图基本使用

在这里插入图片描述

const xData = ['华为 mate 40', '华为 P40', '小米10', 'vivo X60', 'oppo Reno5 pro']
const yData = [1608, 1323, 908, 809, 1010]

const option = {
    title: {
        text: '12月手机销售数据'  // 图表标题
    },
    xAxis: {
        type: 'category',  // 类目轴
        data: xData        //显示在x轴的分类名称
    },
    yAxis: {
        type: 'value'      // 数值轴,y轴坐标不用设置,系统会自动产生
    },
    series: [
        {
            name: '销售数据'
            type: 'bar',   // 图表类型,bar代表是柱状图
            data: yData    // y轴数据
        }
    ]
}

3.2 其他常见效果

  • 最大值: series.markPoint
  • 最小值: series.markPoint
  • 平均值: series.markLine
series: [
    {
        type: 'bar', 
        data: yData, 
        markPoint: {   //标记点
            data: [
                { type: 'max', name: '最大值'},
                { type: 'min', name: '最小值'}
            ]
        },
        markLine: {
            data: [
              { type: 'average', name: '平均值', lineStyle: {color: 'orange'},
              { type: 'max', name: '最大值'},
              { type: 'min', name: '最小值', lineStyle: {color: 'red'}}
            ]
        }
    }
]
  • 数值显示: series. label
  • 柱宽: series.barWidth
const option = {
    title: {
        text: '12月手机销售数据'
    },
    xAxis: {
        type: 'category',  // 类目轴
        data: xData  //显示在x轴的分类名称
    },
    yAxis: {
        type: 'value'   // 数值轴,y轴坐标不用设置,系统会自动产生
    },
    series: [
        {
            type: 'bar',      // 图标类型,bar代表是柱状图
            data: yData,      // y轴数据
            label: {          
                show: true,   // 是否显示数据
                position: 'insideTop'  // 数据显示位置
            },
            barWidth: '30%',  // 柱宽,可以使用百分百也可以使用像素
        }
    ]
}
  • 横向显示

交换 xAxis 和 yAxis 中的配置项即可

const option = {
    title: {
        text: '12月手机销售数据'
    },
    xAxis: {
        type: 'value'   // 数值轴,y轴坐标不用设置,系统会自动产生
    },
    yAxis: {
        type: 'category',  // 类目轴
        data: xData  //显示在x轴的分类名称

    },
    series: [
        {
            type: 'bar',   // 图标类型,bar代表是柱状图
            data: yData,    // y轴数据
            label: {
                show: true,
                position: 'insideTop'
            },
            barWidth: '50px',
        }
    ]
}

4. 通用配置项

通用配置项就是所有图表都能使用的配置项

4.1 title

title: 用来设置主标题、副标题、标题样式等

title: {
    text: '12月手机销售数据',            // 主标题文字
    subtext:  '销售数据前5名',          // 副标题文字
    textStyle: {                      // 标题样式
        color: 'red',
        fontSize: 30
    },       
    link: 'http://www.baidu.com',     // 标题超链接
    left: 'right'                     // 标题距离左侧的位置, left、right、center
}

在这里插入图片描述

4.2 tooltip

tooltip: 提示框组件,用来配置鼠标进入或者点击时的提示信息

tooltip: {
    trigger: 'item',   // 提示信息, itme、axis
    triggerOn: 'mousemove',   //提示方式, mousemove(默认)、click
    formatter: '{b} <br /> {a}: {c}'      // 提示框浮层内容格式器,支持字符串模板和回调函数两种形式。
}
  • {a}: 系列名称,就是 series 中的 name
  • {b}: 类目值, 就是 x 轴的分类名
  • {c}: 数值, 当前分类对应的数值
tooltip: {
    trigger: 'item',
    triggerOn: 'click',
    formatter: function (arg) {
    	return `${arg.name}: <br> ${arg.seriesName}: ${arg.value}`
    }
}

在这里插入图片描述

4.3 toolbox

工具栏。内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具。

toolbox: {
  feature: {
    saveAsImage: {   // 保存为图片
      type: 'png',
      title: '保存为图片'
    },
    dataView: {},    // 数据视图
    restore: {},     // 重置视图
    dataZoom: {},    // 区域缩放
    magicType: {     // 图表切换
      type: ['bar', 'line']    // 在柱状图和折线图之间切换
    }
  }
}

在这里插入图片描述

4.4 legend

legend: 图例,用于筛选系列,要和 series 配合使用

在 series 中可以有多组数据, 只要定义多个对象即可

legend:{
              orient:'vertical',
              left:'left',
              data:[
                {name:'11月销量',icon:'circle'},
                {name:'12月销量',icon:'diamond'},
              ]
            },
            xAxis: {
                data: xData
            },
            yAxis: {},
            series: [
              {
                type: 'bar',
                data: yData1,
                name:'11月销量'
              },
              {
                type: 'bar',
                data: yData2,
                name:'12月销量'
              }
            ]
        };
  • series 是一个数组,在series中每多定义一个对象,就意味着多了一组数据
  • legend 用来做数据筛选
    • name: 系列数据的名称,该名称必须和 series 中的 name 值一致
    • icon: 图标样式

5. 柱状图综合练习

展示如图所示
在这里插入图片描述

<script>
    const xData = ['2017年', '2018年', '2019年', '2020年']
    const yData1 = [650, 588, 720, 703]
    const yData2 = [570, 820, 998, 409]
    const yData3 = [768, 629, 529, 209]
    const yData4 = [356, 763, 685, 358]
    // 初始化
    var barCharts = echarts.init(document.getElementById('bar'));
    // 指定图表的配置项和数据
    var option = {
            title: {
                text: '历年招生数量分布图',
                textStyle:{
                  color:'orange',
                  fontSize:'26px',
                },
            },
            toolbox:{
              feature:{
                dataZoom:{},
                restore:{
                  title:'重置数据'
                },
                dataView:{
                  title:'数据视图',
                  textColor:'orange'
                },
                saveAsImage:{
                  type:'jpg',
                },
                magicType: {
                  type: ['line', 'bar']
                }
              }
            },
            legend:{
              left:'center',
              data:[
                {name:'java',icon:'diamond'},
                {name:'Web',icon:'diamond'},
                {name:'Python',icon:'diamond'},
                {name:'C/C++',icon:'diamond'},
              ]
            },
            xAxis: {
                data: xData
            },
            yAxis: {},
            series: [
              {
                type: 'bar',
                data: yData1,
                name:'java',
                label:{
                  show:true,
                  position: 'insideTopLeft'
                }
              },
              {
                type: 'bar',
                data: yData2,
                name:'Web',
                label:{
                  show:true,
                  position: 'insideTopLeft'
                }
              },
              {
                type: 'bar',
                data: yData3,
                name:'Python',
                label:{
                  show:true,
                  position: 'insideTopLeft'
                }
              },
              {
                type: 'bar',
                data: yData4,
                name:'C/C++',
                label:{
                  show:true,
                  position: 'insideTopLeft'
                }
              }
            ]
        };
        // 使用刚指定的配置项和数据显示图表。
        barCharts.setOption(option);
  </script>

6. 折线图

6.1 折线图基本使用

折线图和柱状图基本上是一样的

在这里插入图片描述

var xdata = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月',]
var ydata = [1580, 2198, 3672, 3856, 6978, 8125, 8210, 8186, 7568, 6321, 3890, 2210]


var option = {
    title: {
        text: '2020年销售数据'
    },
    xAxis: {
        type: 'category',
        data: xdata
    },
    yAxis: {},
    series: [
        {
            name: '康师傅',
            type: 'line',
            data: ydata
        }
    ]
}

6.2 通用配置

在这里插入图片描述

var option = {
    title: {
        text: '2020年销售数据'
    },
    xAxis: {
        type: 'category',
        data: xdata
    },
    legend: {
        data: [
            {name: '康师傅'},
            {name: '统一'}
        ]
    },
    tooltip: {},
    toolbox: {
        feature: {
            saveAsImage: {},
            dataZoom:{},
            magicType: {
                type: ['line', 'bar']
            }
        }
    },
    yAxis: {},
    series: [
        {
            name: '康师傅',
            type: 'line',
            data: ydata1
        },
        {
            name: '统一',
            type: 'line',
            data: ydata2
        }
    ]
}

6.2 其他效果

  • 线条控制: series.smooth,折线(false)、平滑曲线(true)
  • 填充风格: series.areaStyle,折线内部的填充风格
    • color: 填充颜色
    • opacity: 透明度
  • 紧挨边缘: xAxis.boundaryGap , 值在y轴上(false),值在中间(true)
var option = {
    title: {
        text: '2020年销售数据'
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: xdata
    },
    yAxis: {},
    series: [
        {
            name: '康师傅',
            type: 'line',
            data: ydata,
            smooth: true,
            areaStyle: {
                color: 'red',
                opacity: 0.3
            }
        }
    ]
}

7. 饼状图

在这里插入图片描述
实际工作时,我们通常都使用复制/粘贴,修改数据 的方式来使用 echarts


    // 初始化
    var pieCharts = echarts.init(document.getElementById('pie'));
    var data = [
          {value: 122000, name: '18岁以下'},
          {value: 335380, name: '19-28岁'},
          {value: 266892, name: '29-45岁'},  
          {value: 102020, name: '46-65岁'},
          {value: 9782, name: '65岁以上'},
    ]
    var ageAry = ['18岁以下', '19-28岁', '29-45岁', '46-65岁', '65岁以上']
    // 指定图表的配置项和数据
    var option = {
              title: {
                  text: 'App用户年龄层分部图',
                  left: 'center'
              },
              tooltip: {
                  trigger: 'item',
                  formatter: '{a} <br/>{b} : {c} ({d}%)'
              },
              legend: {
                  orient: 'vertical',
                  left: 'left',
                  data: ageAry
              },
              series: [
                  {
                      name: '用户年龄层',
                      type: 'pie',
                      radius: '55%',
                      center: ['50%', '60%'],
                      data:data,
                      emphasis: {
                          itemStyle: {
                              shadowBlur: 10,
                              shadowOffsetX: 0,
                              shadowColor: 'rgba(0, 0, 0, 0.5)'
                          }
                      }
                  }
              ]
          };
    // 使用刚指定的配置项和数据显示图表。
        pieCharts.setOption(option);

8. 补:vue中使用Echarts

  1. 创建 Report.vue 组件,并正常显示

  2. 安装 echarts

  3. 在 Report.vue 组件中导入 echarts

  4. 绘制折线图

  5. 发送ajax请求获取数据,再绘制真正的图形

  6. 修改配置项

​ lodash.merge 合并数组 (深度合并)

main.js

// 将echarts对象挂载到Vue对象上
Vue.prototype.$echarts = window.echarts

Report.vue

<template>
  <div>
      <el-breadcrumb separator-class="el-icon-arrow-right">
      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
      <el-breadcrumb-item>数据统计</el-breadcrumb-item>
      <el-breadcrumb-item>统计报表</el-breadcrumb-item>
    </el-breadcrumb>
    <el-card>
      <div id="line" style="width:800px; height:600px">
      </div>
    </el-card>
  </div>
</template>

<script>
// 导入echarts
// import echarts from '../../../public/static/echarts.min.js'
import _ from 'lodash'
export default {
  // data () {},
  // methods: {},
  async mounted () {
    // ajax
    const { data: result } = await this.$http.get('reports/type/1')
    console.log(result.data)
    // 初始化echarts实例
    const lineCharts = this.$echarts.init(document.getElementById('line'))
    // 定义配置项
    const option = {
      xAxis: [
        { boundaryGap: false }
      ]
    }
    // 合并配置项
    const res = _.merge(result.data, option)
    // 使用刚指定的配置项和数据显示图表。
    lineCharts.setOption(res)
  }
}
</script>>

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值