数据可视化--Echarts

234 阅读8分钟

Echarts介绍

数据可视化

数据可视化主要目的:借助图形化手段,清晰有效地传达与沟通信息

数据可视化可以把数据从冰冷地数字转化为图形,揭示蕴含在数据中的规律和道理

Echarts简介

Echarts是一个JavaScript实现的开源可视化库,可以流畅的运行在PC和移动端设备上,兼容当前大部分浏览器,底层依赖矢量图形库ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。 官网地址:echarts.apache.org/zh/index.ht…

Echarts基本使用

Echarts使用五部曲

1.下载并引入Echarts.js文件

 <script src="./echarts.js"></script>

2.准备一个具备大小的DOM容器

<div class='box' style="width: 600px;height:400px;"></div>

3.初始化echarts实例对象

var myChart = echarts.init(document.querySelector('.box'))

4.指定配置项和数据(opation)

  var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data: ['销量']
            },
            xAxis: {
                data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
            },
            yAxis: {},
            series: [
                {
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                }
            ]
        };

5.将配置项设置给echarts实例对象

myChart.setOption(option);

基础配置

  • title:标题组件
  • tooltip:提示框组件
  • legend:图例组件
  • toolbox:工具栏
  • grid:直角坐标系内绘制网格
  • xAxis:直角坐标系grid中的X轴
  • yAxis:直角坐标系grid中的y轴
  • series:系列列表
  • color:调色盘颜色列表

HE8]1EA7@`V8UQA_@I(UB.png

折线图

步骤

  1. 封装好函数,为后续传入真实数据做准备
  2. 初始化echarts
  3. 设置配置项,空的option 即可
  4. 创建图表
  5. 查找官方示例
  6. 按需求,自定义配置图表

自定义配置

  • 将官方示例中除了option之外的其他代码删除,并自己添加X轴数据和series中的数据。

  • 系列数据

    • 增加一条线
    • 修改 name 为 '期望薪资' 和 '实际薪资'
    • 线的拐点为平滑拐点
    • 线条和X轴对齐位置,无特殊标记 symbol: 'none'
  • 分析数据缩放组件 dataZoom

  • 增加标题,标题颜色 #6d767e

  • 分析tooltip(官方示例已带)。

  • 增加图例,距离顶部20px。

  • 分析坐标轴留白策略 boundaryGap 完成后的配置项 option 如下:

let option = {
  // 图例
  legend: {
    top: 20,
  },
  // 鼠标移入的提示
  tooltip: {
    trigger: 'axis', // 轴触发
    position: function (pt) {
      // pt是一个数组,pt[0]表示横坐标位置,'10%'表示Y轴方向始终保持距离顶部10%的距离
      // 所以意思是,提示框的位置会跟随鼠标左右移动,但纵向上的位置始终保持不变。
      return [pt[0], '10%']; 
    }
  },
  // 标题
  title: {
    text: '薪资 Salary',
    textStyle: {
      color: '#6d767e'
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false, // x轴两边的留白策略,false表示不留空白
    data: ['张三', '李四', '张飞', '赵云', '狗哥', '张三', '李四', '张飞', '赵云', '狗哥', '张三', '李四', '张飞', '赵云', '狗哥', '张三', '李四', '张飞', '赵云', '狗哥']
  },
  yAxis: {
    type: 'value',
    // Y轴类型为value,则留白策略指的是对数据的延伸。
    // 比如,图表中的数据最大值是17000,则Y轴最大数字大约是 17000 + 17000 * 50%
    boundaryGap: [0, '50%'],
  },
  // 数据缩放组件
  dataZoom: [
    // {
    //   type: 'inside', // 将拖动的条内置到轴里面,看不见了,但是可以拖动
    //   start: 0,
    //   end: 10
    // },
    {
      type: 'slider', // 拖动条显示到轴的外面(默认就是slider类型)
      start: 0, // 拖动滑块起始位置(这是一个百分比)
      end: 15 // 拖动滑块结束位置(这是一个百分比)
    }
  ],
  // 数据部分
  series: [
    {
      name: '期望薪资',
      type: 'line',
      smooth: true, // 表示使用平滑曲线
      symbol: 'none', // 线上拐点位置的样式,none表示没有;也可以是实心圆、空心圆、方块.....
      itemStyle: { // 单独控制这条线的颜色
        color: '#ee6666'
      },
      data: [8300, 9600, 15000, 17000, 12000, 8300, 9600, 15000, 17000, 12000, 8300, 9600, 15000, 17000, 12000, 8300, 9600, 15000, 17000, 12000]
    },
    {
      name: '实际薪资',
      type: 'line',
      smooth: true,
      symbol: 'none',
      itemStyle: { // 单独控制这条线的颜色
        color: '#5470c6'
      },
      data: [9600, 15000, 17000, 12000, 8300, 9600, 15000, 17000, 12000, 8300, 9600, 15000, 17000, 12000, 8300, 9600, 15000, 17000, 12000, 13000]
    }
  ]
};

柱状图

步骤

  1. 封装好函数,为后续传入真实数据做准备
  2. 初始化echarts
  3. 设置配置项,空的option 即可
  4. 创建图表
  5. 查找官方示例
  6. 按需求,自定义配置图表

自定义配置

  • 修改X轴及series中的数据

    ['1组', '2组', '3组', '4组', '5组', '6组', '7组']
    [83, 57, 90, 78, 66, 76, 77, 87, 69, 92, 88, 78]
    [2, 1, 3, 4, 2, 5, 2, 2, 4, 1, 6, 2]
    [3, 2, 1, 5, 1, 2, 3, 4, 5, 2, 2, 4]
    [3, 2, 1, 5, 1, 2, 3, 4, 5, 2, 2, 4]
    复制代码
    
  • 多个Y轴

    • 第一个y轴(索引0)表示平均分,范围0~100,根据数字10,将Y轴分为10份
    • 第二个y轴(索引1)表示人数,范围0~10(根据班级情况而定),根据数字1,将y轴分为10份。
  • 系列数据

    • 增加至 4 组数据,并修改每组 name
    • 修改每个柱子的宽度为 15px
    • 让平均分使用第一个Y轴(yAxisIndex: 0),让人数使用第二个Y轴(yAxisIndex: 1
  • 调整网格(图表的宽高)

    • 上下 30px,左右 7%
  • 分析tooltip(官方示例已带)

let option = {
  // 网格(整个图表区域设置)
  grid: {
    top: 30,
    bottom: 30,
    left: '7%',
    right: '7%'
  },
  // 鼠标移入的提示
  tooltip: {
    trigger: 'axis', // 触发方式,axis表示轴触发,item表示每一项
    axisPointer: {   // 坐标轴指示器配置项
      // 十字准星指示器,其他选项有 line、shadow、none(这里配合x轴的设置,组成的十字准星)
      type: 'cross', 
      crossStyle: {
        color: '#999'
      }
    }
  },
  // 图例
  legend: {},
  // X轴
  xAxis: [
    {
      type: 'category',
      data: ['1组', '2组', '3组', '4组', '5组', '6组', '7组'],
      axisPointer: { // 坐标轴指示器为阴影,配合tooltip中的设置,组成十字准星
        type: 'shadow'
      }
    }
  ],
  // Y轴
  yAxis: [
    {
      type: 'value',
      min: 0, // y轴数据最小值
      max: 100, // y轴数据最大值
      interval: 10, // step步长,把y轴的数据分成多少份
      axisLabel: { // Y轴文字设置
        formatter: '{value}分', // Y轴文字
      }
    },
    {
      type: 'value',
      min: 0,
      max: 10,
      interval: 1,
      axisLabel: {
        formatter: '{value}人'
      }
    }
  ],
  // 数据部分(4组数据)
  series: [
    {
      name: '平均分',
      type: 'bar',
      data: [83, 57, 90, 78, 66, 76, 77, 87, 69, 92, 88, 78],
      barWidth: '15',
    },
    {
      name: '低于60分人数',
      type: 'bar',
      data: [2, 1, 3, 4, 2, 5, 2, 2, 4, 1, 6, 2],
      barWidth: '15',
      yAxisIndex: 1, // Y轴索引,1表示使用第2个Y轴
    },
    {
      name: '60到80分之间',
      type: 'bar',
      yAxisIndex: 1, // Y轴索引,1表示使用第2个Y轴
      barWidth: '15',
      data: [1, 4, 2, 4, 5, 2, 1, 3, 3, 2, 2, 4]
    }
    ,
    {
      name: '高于80分人数',
      type: 'bar',
      yAxisIndex: 1, // Y轴索引,1表示使用第2个Y轴
      barWidth: '15',
      data: [3, 2, 1, 5, 1, 2, 3, 4, 5, 2, 2, 4]
    }
  ]
};

饼状图

步骤

  1. 封装好函数,为后续传入真实数据做准备
  2. 初始化echarts
  3. 设置配置项,空的 option 即可
  4. 创建图表
  5. 查找官方示例
  6. 按需求,自定义配置图表

自定义配置

  • 增加标题,标题颜色 #6d767e

  • 增加鼠标移入提示。(比如:“各地学员分布 北京市 12人 占比6.8%”)

  • 系列数据

    • 修改 name 为 '各地学员分布'
    • 饼图,内圈半径 10%,外圈半径 60%
    • 居中显示
    • 面积模式
    • 扇形轮廓圆角(4px) 完成后的配置:
let option = {
  tooltip: {
    // {a} 表示series中的name
    // {b} 表示数据中的series.data中的name
    // {c} 表示每一项的值
    // {d} 表示百分比
    formatter: '{a} <br />{b} <strong>{c}</strong>人 占比{d}%'
  },
  title: {
    text: '籍贯 Hometown',
    textStyle: {
      color: '#6d767e' // 标题演示
    },
  },
  series: [
    {
      name: '各地人口分布',
      type: 'pie', // pie 表示饼图
      radius: ['10%', '65%'], // 内外圈的半径
      center: ['50%', '50%'], // 中心点
      roseType: 'area', // area表示面积模式,radius表示半径模式
      itemStyle: { // 每一项的设置
        borderRadius: 4, // 扇形边缘圆角设置
      },
      data: [
        { value: 40, name: '北京' },
        { value: 38, name: '山东' },
        { value: 32, name: '上海' },
        { value: 30, name: '江苏' },
        { value: 28, name: '河北' },
        { value: 26, name: '山西' },
        { value: 22, name: '河南' },
        { value: 18, name: '辽宁' }
      ]
    }
  ]
};

数据可视化项目适配方案

需求分析

  • 设计稿是1920px
  • pc端适配:宽度在1024~1920之间页面元素宽高自适应

适配方案

  • flexible.js 检测浏览器宽度 修改html文字大小
  • rem单位 页面元素根据rem适配配合cssrem插件
  • flex布局 页面快速布局 N7W@~)$J5GAUREH772U~8.png
         /* 宽度在1024~1920之间页面元素宽高自适应 */
        @media screen and (max-width:1024px) {
            html {
                font-size: 42.66px !important;
            }
        }

        @media screen and (max-width:1920) {
            html {
                font-size: 80px !important;
            }
        }

        .box {
            width: 400px;
            height: 400px;
            background-color: pink;
        }