基于echarts+js+fexible.js实现的数据可视化适配案例(附源代码)
时间:2023-03-01 15:30:00
介绍
数据可视化 :借助图形手段,清晰有效地传达和交流信息
ECharts:是一个使用JavaScript实现的开源可视化库可以顺利运行PC与当前大多数浏览器相兼容的移动设备,底层依赖矢量图形库ZRender,数据可视化图表提供直观、交互丰富、高度个性化定制。
数据可视化场景:
- 通用报表
- 移动端图表
- 大屏可视化
- 图编辑&图分析
- 地理可视化
实现效果
ECharts使用
ECharts使用五部曲:
-
第一步:下载并引用echarts.js文件:https://echarts.apache.org/zh/index.html
-
第二步:准备一个有大小的DOM容器
<div id="main" style="width: 600px;height:400px;">div>
-
第三步:初始化echarts实例对象
var myChart = echarts.init(document.getElementById('main'));
-
第四步:指定配置项和数据(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' }] };
部分参数如下表所示:
名称 | 说明 |
---|---|
title | 标题组件 |
tooltip | 提示框组件 |
legend | 图例组件 |
toolbox | 工具栏 |
grid | 直角坐标系内绘图网格 |
xAxis | 直角坐标系grid中的x轴 |
yAxis | 直角坐标系grid中的y轴 |
series | 系列列表。每个系类通过type决定自己的图表类型(什么类型的图表) |
type | 类型(什么类型的图表),比如line是折线图,bar柱形等 |
name | 系列名称,用于tooltip的显示,legend的图例筛选变化 |
color | 调色盘颜色列表 |
- 步骤五:将配置项设置给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 数据堆叠,同个类目轴上系列配置相同的
stack
值后 后一个系列的值会在前一个系列的值上相加。
更多的参数配置可以到echarts官网的配置手册查询使用
代码演示
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]
}
]
};
边框图片
盒子大小不一,但是边框样式相同,此时就需要边框图片来完成
边框图片切图原理
把这个图切出去(九宫格),中间部分可以铺排,拉伸或者环绕
按照上右下左的顺序切割图片,分成九部分
中间部分实现平铺(repeat)、铺满(round)、拉伸(stretch )
这样就是想边框背景图片的使用了
边框图片语法
css3中新增的属性:border-image
语法 | 说明 |
---|---|
border-image-source | 用在边框图片的路径 |
border-image-slice | 图片边框向内偏移(裁剪尺寸,不加单位,上右下左的顺序) |
border-image-width | 图片边框的宽度(加单位)(不是边框的宽度是边框图片的宽度) |
border-image-repeat | 图像边框平铺(repeat)、铺满(round)、拉伸(stretch 默认拉伸) |
border-image-source: url("images/border.jpg");
border-image-slice: 167 167 167 167;
border-image-width: 20px;
border-image-repeat: round;
复合写法
border-image: url("images/border.jpg") 167/20px round;
案例
- 边框图片资源地址
- 裁剪尺寸(上 右 下 左)单位默认px,可使用百分百。
- 边框图片的宽度,默认边框的宽度。
- 平铺方式:
- stretch 拉伸(默认)
- repeat 平铺,从边框的中心向两侧开始平铺,会出现不完整的图片。
- round 环绕,是完整的使用切割后的图片进行平铺。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style> .box {
width: 200px; height: 200px; border: 15px solid pink; border-image-source: url(images/border.jpg); border-image-slice: 167; border-image-repeat: round; } style>
head>
<body>
<div class="box">div>
body>
html>
案例中使用的图片:
公用面板样式案例
切割示例图:
切割图片的时候尽量按照宽的地方切割,比如下边框要比上边框长,所以按照下边框的长的来切割
/* 公共面板样式 */
.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;
}
通过类名调用字体图标
之前我们通过复制自己字体图标的小方块已经初始化字体图标来引入字体图标
现在再来学医一中新的引入方式,通过类名调用
- html页面引入字体图标中css文件
<link rel="stylesheet" href="fonts/style.css">
- 标签直接调用图标对应的类名(类名在css文件中标注)
<span> <i class="icon-circleci" style="color: #006cff">i> 设备总数 span>
立即执行函数
为防止变量名冲突(变量污染),采用立即执行函数
(function(){})()
多个立即执行函数中间必须用分号隔开
修改线性渐变色方式
第一种
color: new echarts.graphic.LinearGradient(
// (x1,y2) 点到点 (x2,y2) 之间进行渐变
0, 0, 0, 1,
[
{
offset: 0, color: '#00fffb' }, // 0 起始颜色
{
offset: 1, color: '#0061ce' } // 1 结束颜色
]
),
第二种
// 修改线性渐变色方式 2
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'red' // 0% 处的颜色
}, {
offset: 1, color: 'blue' // 100% 处的颜色
}],
globalCoord: false // 缺省为 false
},
两种方法都能达成以下效果
REM适配
-
设计稿是1920px
-
PC端适配: 宽度在 1024~1920之间页面元素宽高自适应
- flexible.js 把屏幕分为 24 等份
- cssrem 插件的基准值是 80px
插件-配置按钮—配置扩展设置–Root Font Size 里面 设置。
但是别忘记重启vscode软件保证生效
// 实现rem适配
@media screen and (max-width: 1024px) {
html {
font-size: 42.66px !important;
}
}
@media screen and (min-width: 1920px) {
html {
font-size: 80px !important;
}
}
完整代码
css文件包含内容
js文件包含内容
基于echarts+js实现的数据可视化案例文件夹
html代码
DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Documenttitle> <link rel="stylesheet" href="fonts/style.css"> <link rel="stylesheet" href="css/index.css"> <script src="js/echarts.min.js">script> <script src="js/flexible.js">script> <script src="js/jquery-3.6.0.min.js">script> head> <body> <div class="viewport"> <div class="column"> <div class="panel overview"> <div class="inner"> <ul> <li> <h4>2,190h4> <span> <i class="icon-circleci" style="color: #006cff">i> 设备总数 span> li> <li> <h4>190h4> <span> <i class="icon-circleci" style="color: #6acca3">i> 季度新增 span> li> <li> <h4>3,001h4> <span> <i class="icon-circleci" style="color: #6acca3">i> 运营设备 span> li> <li> <h4>108h4> <span> <i class="icon-circleci" style="color: #ed3f35">i> 异常设备 span> li> ul> div> div> <div class="panel monitor"> <div class="inner"> <div class="tabs"> <a href="javascript:;" class="active">故障设备监控a> <a href="javascript:;">异常设备监控a> div> <div class="content" style="display: block ;"> <div class="head"> <span class="col">故障时间span> <span class="col">设备地址span> <span class="col">异常代码span>