网络知识 娱乐 【Echarts数据可视化】一个项目带你学会酷炫的数据可视化

【Echarts数据可视化】一个项目带你学会酷炫的数据可视化

🥂(❁´◡`❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞

最终效果展示:
在这里插入图片描述

文章の目录

  • 🏆 学习の目标
  • 🥇 一、项目の介绍
  • 🥇 二、项目用到的技术
  • 🥇 三、Echarts-介绍
  • 🥇 四、Echarts-体验
    • 🥈 4.1 Echarts 使用步骤
      • 🏅 4.1.1步骤一
      • 🏅 4.1.2步骤二
      • 🏅 4.1.3步骤三
      • 🏅 4.1.4步骤四
      • 🏅 4.1.5步骤五
      • 🏅 4.1.6步骤六
  • 🥇 五、Echarts-基础配置
  • 🥇 六、rem适配
    • 🥈 7.1 html结构
    • 🥈 7.2 css样式
  • 🥇 八、边框图片
  • 🥇 九、公用面板样式
  • 🥇 十、概览区域(overview)-布局
    • 🥈 10.1 html结构
    • 🥈 10.2 css样式
  • 🥇 十一、监控区域(monitor)-布局
    • 🥈 11.1 html结构
      • 🏅 11.1.1 html 结构解释
    • 🥈 11.2 css 样式
      • 🏅 11.2.1 css 样式解释
  • 🥇 十二、监控区域tab栏切换、动画效果
    • 🥈 12.1 tab 栏切换效果
    • 🥈 12.2 无缝滚动效果
      • 🏅 12.2.1 实现思路
      • 🏅 12.2.2 JS 代码
      • 🏅 12.2.3 CSS 代码
  • 🥇 十三、点位区域布局
    • 🥈 13.1 html 结构
    • 🥈 13.2 CSS 样式
  • 🥇 十四、点位区域-饼图
    • 🥈 14.1 html引入图表
    • 🥈 14.2 定制需求
      • 🏅 14.2.1第一步
      • 🏅 14.2.2 第二步安需求定制图形
      • 🏅 14.2.3 按需求定制后完整的代码
  • 🥇 十五、地图区域 (map) -预留布局
    • 🥈 15.1 html 结构
    • 🥈 15.2 CSS 样式
  • 🥇 十六、用户统计 (users) -布局
    • 🥈 16.1 html结构
    • 🥈 16.2 CSS样式
  • 🥇 十七、用户统计 (users) -柱状图
    • 🥈 17.1 实现步骤
      • 🏅 17.1.1 参考官方案例 + 分析
      • 🏅 17.1.2 按照需求修改
  • 🥇 十八、订单区域(order)-布局
    • 🥈 18.1 html 结构
    • 🥈 18.2 CSS 样式
  • 🥇 十九、订单区域(order)-效果
  • 🥇 二十、销售统计( sales )-布局
    • 🥈 20.1 html 结构
    • 🥈 20.2 CSS 样式
  • 🥇 二十一、销售统计( sales )-线形图
    • 🥈 21.1 第一步
    • 🥈 21.2第二步
  • 🥇 二十二、销售统计( sales )-切换效果
    • 🥈 22.1 第一步
    • 🥈 22.2 第二步(实现点击切换效果)
    • 🥈 22.3 第三步(tab栏自动切换效果)
  • 🥇 二十三、渠道区域&销售进度-布局
    • 🥈 23.1 html 结构
    • 🥈 23.2 CSS 样式
  • 🥇 二十四、渠道分布(channel)-雷达图
    • 🥈 24.1 第一步
    • 🥈 24.2 第二步(按照需求定制)
    • 🥈 24.3 定制后的完整代码
  • 🥇 二十五、销售进度 (quarter) -饼状图
    • 🥈 25.1 第一步
    • 🥈 25.2 第二步(根据需求进行定制)
  • 🥇 二十六、热销排行(top)-布局
    • 🥈 26.1 html结构
    • 🥈 26.2 CSS样式
  • 🥇 二十七、热销排行(top)-效果
    • 🥈 27.1 第一步
    • 🥈 27.2 第二步
    • 🥈 27.3 第三步
    • 🥈 27.4 第四步
    • 🥈 27.5 第五步
  • 🥇 二十八、Echarts-社区介绍
  • 🥇 二十九、Echarts-map使用(扩展)
  • 🥇 知识の总结
  • 🥇 推荐の内容

🏆 学习の目标

1.学会使用echarts库里的各种矢量图形表
2. 学会通过修改库中矢量图形的参数去定制自己需要的矢量图表
3. 学会边框图形的用法

🥇 一、项目の介绍

    应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。我们引入 ‘立可得’ 数据可视化项目。
​    该项目除了使用了基础的DIV+CSS布局,还引入了一些C3技术,还引入了各类图表的绘制,以及高级的地图数据可视化案例。主要功能有:饼状图、柱状图、线形图、地图 …

🥇 二、项目用到的技术

完成该项目需要具备以下知识:

  • div + css 布局
  • flex 布局
  • css3动画
  • css3渐变
  • css3边框图片
  • 原生js + jquery 使用
  • rem适配
  • echarts基础

粗略代码统计:

  • css 580行
  • html 450行
  • js 400行 (有效)

🥇 三、Echarts-介绍

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

通俗讲:

  • 是一个JS插件
  • 性能好可流畅运行PC与移动设备
  • 兼容主流浏览器
  • 提供很多常用图表,且可定制
    • 折线图、柱状图、散点图、饼图、K线图

🥇 四、Echarts-体验

官方教程链接

🥈 4.1 Echarts 使用步骤

🏅 4.1.1步骤一

下载echarts

🏅 4.1.2步骤二

引入echarts dist/echarts.min.js

🏅 4.1.3步骤三

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

代码示例:

<div id="main" style="width: 600px;height:400px;"></div>

🏅 4.1.4步骤四

初始化echarts实例对象

var myChart = echarts.init(document.getElementById('main'));

🏅 4.1.5步骤五

指定配置项和数据(option)

var option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: 'line'
    }]
};

📣注意:小伙伴们在指定配置项的时候注意一定要带上var哦;❗❗❗

🏅 4.1.6步骤六

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

myChart.setOption(option);

🥇 五、Echarts-基础配置

以下配置很重要,小伙伴们一定要牢记哦!:series xAxis yAxis grid tooltip title legend color

  • series

    • 系列列表。每个系列通过 type 决定自己的图表类型
    • :图标数据,指定什么类型的图标,可以多个图表重叠。
  • xAxis:直角坐标系 grid 中的 x 轴

    • boundaryGap: 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
  • yAxis:直角坐标系 grid 中的 y 轴

  • grid:直角坐标系内绘图网格。

  • title:标题组件

  • tooltip:提示框组件

  • legend:图例组件

  • color:调色盘颜色列表

    数据堆叠,同个类目轴上系列配置相同的stack值后 后一个系列的值会在前一个系列的值上相加。

代码实例:

var option = {
            color: ['pink', 'blue', 'green', 'skyblue', 'red'],
            title: {
                text: '我的折线图'
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['直播营销', '联盟广告', '视频广告', '直接访问']
            },
            grid: {
                left: '3%',
                right: '3%',
                bottom: '3%',
                // 当刻度标签溢出的时候,grid 区域是否包含坐标轴的刻度标签。如果为true,则显示刻度标签
                // 如果left right等设置为 0% 刻度标签就溢出了,此时决定是否显示刻度标签
                containLabel: true
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            xAxis: {
                type: 'category',
                // 坐标轴两边留白策略 true,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
                boundaryGap: false,
                data: ['星期一', '星期二', '周三', '周四', '周五', '周六', '周日']
            },
            yAxis: {
                type: 'value'
            },
            series: [
                {
                    name: '直播营销',
                    // 图表类型是线形图
                    type: 'line',
                    data: [120, 132, 101, 134, 90, 230, 210]
                },
                {
                    name: '联盟广告',
                    type: 'line',

                    data: [220, 182, 191, 234, 290, 330, 310]
                },
                {
                    name: '视频广告',
                    type: 'line',

                    data: [150, 232, 201, 154, 190, 330, 410]
                },
                {
                    name: '直接访问',
                    type: 'line',

                    data: [320, 332, 301, 334, 390, 330, 320]
                }
            ]
        };

🥇 六、rem适配

  • 设计稿是1920px

  • PC端适配: 宽度在 1024~1920之间页面元素宽高自适应

    1. flexible.js 把屏幕分为 24 等份

    2. cssrem 插件的基准值是 80px

      插件-配置按钮—配置扩展设置–Root Font Size 里面 设置。

      但是别忘记重启vscode软件保证生效

    3. 要把屏幕宽度约束在1024~1920之间有适配。

// 实现rem适配
@media screen and (max-width: 1024px) {
     html {
         font-size: 42.66px !important;
     }
 }

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

🥈 7.1 html结构

  • 效果图: 1920px * 1078px
  • body 设置背景图 ,行高1.15
  • viewport 主体容器,限制最小宽度1024px,与最大宽度1920px,最小高度780px。
    • 需要居中显示
    • 使用logo.png做为背景图,在容器内显示
    • 内间距 88px 20px 0
  • column 列容器,分三列,占比 3:4:3
    • 中间容器外间距 32px 20px 0
<body>
  <div class="viewport">
  	<div class="column">
      <!--概览-->                                    
    	<div></div>
			<!--监控-->                                    
    	<div></div> 
			<!--点位-->                                    
    	<div></div>                                           
    </div>
    <div class="column">
      <!--地图-->                                    
    	<div></div>
			<!--用户-->                                    
    	<div></div>                                          
    </div>
    <div class="column">
      <!--订单-->                                    
    	<div></div>
			<!--销售-->                                    
    	<div></div>                                  
    	<div>
      	<!--渠道-->                                    
    		<div></div>
      	<!--季度-->                                    
    		<div></div>
      </div>
			<!--排行-->                                    
    	<div></div>                                     
    </div>                        
  </div>
</body>

📣注意:以上结构代码小伙伴可以参考使用,最好自己写出来进行练习哦;❗❗❗

🥈 7.2 css样式

/* 基础布局 */
body{
  font-family: Arial, Helvetica, sans-serif;
  margin: 0;
  padding: 0;
  font-size: 0.5rem;
  line-height: 1.15;
  background: url(../images/bg.jpg) no-repeat 0 0 / cover;
}
h4,h3,ul{
  margin: 0;
  padding: 0;
  font-weight: normal;
}
ul{
  list-style: none;
}
a{
  text-decoration: none;
}
.viewport{
  max-width: 1920px;
  min-width: 1024px;
  margin: 0 auto;
  min-height: 780px;
  padding: 3.667rem 0.833rem 0;
  background: url(../images/logo.png) no-repeat 0 0 / contain;
  display: flex;
}
.column{
  flex: 3;
  position: relative;
}
.column:nth-child(2){
  flex: 4;
  margin: 1.333rem 0.833rem 0;
}

📣注意:以上样式代码小伙伴可以参考使用,最好自己写出来进行练习哦;❗❗❗

🥇 八、边框图片

css3中自适应边框图片运用:

组合写法:

border-image: url("images/border.jpg") 167/20px round;

拆分写法:

border-image-source: url("images/border.jpg");
border-image-slice: 167 167 167 167;
border-image-width: 20px;
border-image-repeat: round;

解释:

  • 第一行是边框图片资源地址
  • 第二行是裁剪尺寸(上 右 下 左)单位默认px,可使用百分百。
  • 第三行是边框图片的宽度,默认边框的宽度。
  • 第四行是平铺方式:
    • stretch 拉伸(默认)
    • repeat 平铺,从边框的中心向两侧开始平铺,会出现不完整的图片。
    • round 环绕,是完整的使用切割后的图片进行平铺。

代码实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框图片</title>
    <style>
        ul{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        li{
            width: 350px;
            height: 160px;
            border: 20px solid #ccc;
            margin-top: 20px;
        }
        li:nth-child(1){
            /*border-image: url("images/border.jpg") 167/20px round;*/
            border-image-source: url("images/border.jpg");
            border-image-slice: 167 167 167 167;
            border-image-width: 20px;
            /*环绕  是完整的使用切割后的图片进行平铺*/                    
            border-image-repeat: round; 
        }
        li:nth-child(2){
            /*平铺 从边框的中心向两侧开始平铺 会出现不完整的图片*/                                         
          border-image: url("images/border.jpg") 167/20px repeat;
        }
        li:nth-child(3){
            /*默认的平铺方式*/
            border-image: url("images/border.jpg") 167/20px stretch;
        }
    </style>
</head>
<body>
<ul>
    <li></li>
    <li></li>
    <li></li>
</ul>
</body>
</html>

📣注意:小伙伴们请注意了,border-image-slice: 167 167 167 167;中的值服从上右下左的顺序,且不带单位哦❗❗❗

🥇 九、公用面板样式

因为所有的面板的基础样式是一致的,提前写好一个公用的面板类。
在这里插入图片描述
面板 .panel

  • 容器 .inner 内边距是 上下24px 左右 36px

代码示例:

/* 公共面板样式  */
.panel {
    position: relative;
    border: 15px solid transparent;
    border-width: .6375rem .475rem .25rem 1.65rem;
    border-image-source: url(../images/border.png);
    border-image-slice: 51 38 20 132;
    margin-bottom: .25rem;
}
.inner {
    position: absolute;
    top: -0.6375rem;
    left: -1.65rem;
    right: -0.475rem;
    bottom: -0.25rem;
    padding: .3rem .45rem;
   
}
.panel h3 {
  font-size: 0.25rem;
  color: #fff;
  font-weight: 400;
}

🥇 十、概览区域(overview)-布局

🥈 10.1 html结构

代码示例:

 <div class="overview panel">
        <div class="inner">
          <ul>
            <li>
              <h4>2,190</h4>
              <span>
                <i class="icon-dot" style="color: #006cff"></i>
                设备总数
              </span>
            </li>
            <li class="item">
              <h4>190</h4>
              <span>
                <i class="icon-dot" style="color: #6acca3"></i>
                季度新增
              </span>
            </li>
            <li>
              <h4>3,001</h4>
              <span>
                <i class="icon-dot" style="color: #6acca3"></i>
                运营设备
              </span>
            </li>
            <li>
              <h4>108</h4>
              <span>
                <i class="icon-dot" style="color: #ed3f35"></i>
                异常设备
              </span>
            </li>
            </ul>
        </div>
      </div>

🥈 10.2 css样式

样式描述:

  • 容器高度 110px
  • h4字体 28px #fff 左边距 4.8px 下间隙 8px
  • span字体 16px #4c9bfd

代码示例:

/* 概览区域 */

.overview {
    height: 1.375rem;
}
.overview ul {
    display: flex;
    justify-content: space-between;
}
.overview ul li h4 {
    font-size: .35rem;
    color: #fff;
    margin: 0 0 .1rem .06rem;
}
.overview ul li span {
    font-size: .2rem;
    color: #4c9bfd;
}

📣注意:小伙伴们时间充裕的话一定要手动敲出html和css样式哦;❗❗❗

🥇 十一、监控区域(monitor)-布局

🥈 11.1 html结构

代码示例:

  <!--监控-->
      <div class="monitor panel">
        <div class="inner">
          <div class="tabs">
            <a href="javascript:;" class="active">故障设备监控</a>
            <a href="javascript:;" >异常设备监控</a>
          </div>
          <div class="content">
            <div class="head">
              <span class="col">故障时间</span>
              <span class