数据可视化不仅是业务人员查看数据的工具,更是数据化运营的助推器。
此文主要通过HTML+JS+CSS搭建可视化数据网站,可应用于数据中台或统计展示。
随着数字化的转型,专业可视化数据平台的出现能够更好传递数据背后价值,并提供强大的数据分析能力,发现产品及数据的关键增长点。








数据可视化的意义是帮助人更好的分析数据,信息的质量很大程度上依赖于其表达方式。对数字罗列所组成的数据中所包含的意义进行分析,使分析结果可视化。其实数据可视化的本质就是视觉对话。数据可视化将技术与艺术完美结合,借助图形化的手段,清晰有效地传达与沟通信息。一方面,数据赋予可视化以价值;另一方面,可视化增加数据的灵性,两者相辅相成,帮助企业从信息中提取知识、从知识中收获价值。精心设计的图形不仅可以提供信息,还可以通过强大的呈现方式增强信息的影响力,吸引人们的注意力并使其保持兴趣,这是表格或电子表格无法做到的。
文章中出现的柱状、条形、圆饼、折线等统计图大部分是基于Echart数据可视化图表库进行开发,它能够提供直观,生动,可交互,可个性化定制的数据可视化图表。是使用Javascript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器。
- 下载echart.js并创建一个HTML页面。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="echarts.min.js"></script>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
</html>
- 去echarts官网事例中选择合适的图表,点击查看详情。

- 回到HTML中,在页面上创建一个DOM容器,并指定对应的宽度跟高度

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="echarts.min.js"></script>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="main" style="height: 500px; width: 1000px;">
</div>
</body>
</html>
- 复制echarts官网的JS代码放到你的JS中,根据ID指向。

<script>
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;
option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: 'line'
}
]
};
option && myChart.setOption(option);
</script>

HTML
<div class="loading">
<div class="loadbox"> <img src="images/loading.gif"> 页面加载中... </div>
</div>
<div class="head">
<h1>智慧门店大数据可视化平台</h1>
<div class="weather"><img src="images/weather.png"><span>多云转小雨</span><span>2021-06-06</span></div>
</div>
<div class="mainbox">
<ul class="clearfix">
<li>
<div class="boxall" style="height: 2.7rem">
<div class="alltitle">销售数据统计</div>
<div class="sycm">
<ul class="clearfix">
<li><h2>1824</h2><span>今日销售额</span></li>
<li><h2>1920</h2><span>昨日销售额</span></li>
<li><h2>19%</h2><span>环比增长</span></li>
</ul>
<div style="border-bottom: 1px solid rgba(255,255,255,.1)"></div>
<ul class="clearfix">
<li><h2>9301</h2><span>今日销售额</span></li>
<li><h2>8873</h2><span>昨日销售额</span></li>
<li><h2>21%</h2><span>环比增长</span></li>
</ul>
</div>
<div class="boxfoot"></div>
</div>
<div class="boxall" style="height: 2.65rem">
<div class="alltitle">消费占比</div>
<div class="sy" id="echarts1"></div>
<div class="sy" id="echarts2"></div>
<div class="sy" id="echarts3"></div>
<div class="boxfoot"></div>
</div>
<div class="boxall" style="height: 2.95rem">
<div class="alltitle">行业区分比例</div>
<div id="echarts4" style="height: 2.2rem; width: 100%;"></div>
<div class="boxfoot"></div>
</div>
</li>
<li>
<div class="bar">
<div class="barbox">
<ul class="clearfix">
<li class="pulll_left counter">12581189</li>
<li class="pulll_left counter">3912410</li>
</ul>
</div>
<div class="barbox2">
<ul class="clearfix">
<li class="pulll_left">消费总金额</li>
<li class="pulll_left">消费总笔数</li>
</ul>
</div>
</div>
<div class="map">
<div class="map1"><img src="images/lbx.png"></div>
<div class="map2"><img src="images/jt.png"></div>
<div class="map3"><img src="images/map.png"></div>
<div class="map4" id="map_1"></div>
</div>
</li>
<li>
<div class="boxall" style="height:5.2rem">
<div class="alltitle">新增会员信息</div>
<div class="tabs">
<ul class="clearfix">
<li><a class="active" href="#">7天</a></li>
<li><a href="#">15天</a></li>
<li><a href="#">30天</a></li>
</ul>
</div>
<div class="clearfix">
<div class="sy" id="echarts6"></div>
<div class="sy" id="echarts7"></div>
<div class="sy" id="echarts8"></div>
</div>
<div class="addnew">
<div class="tit02"><span>今日新增会员列表</span></div>
<div class="adduser">
<ul class="clearfix">
<li class="clearfix"> <span class="pulll_left"><img src="images/head.jpg">1:今日新增会员列表</span> <span class="pulll_right">21岁 - 男 - 西安 </span> </li>
<li class="clearfix"> <span class="pulll_left"><img src="images/head.jpg">2:今日新增会员列表</span> <span class="pulll_right">22岁 - 女 - 成都 </span> </li>
<li class="clearfix"> <span class="pulll_left"><img src="images/head.jpg">3:今日新增会员列表</span> <span class="pulll_right">23岁 - 男 - 广州 </span> </li>
<li class="clearfix"> <span class="pulll_left"><img src="images/head.jpg">4:今日新增会员列表</span> <span class="pulll_right">24岁 - 女 - 北京 </span> </li>
</ul>
</div>
</div>
<div class="boxfoot"></div>
</div>
<div class="boxall" style="height: 3.4rem">
<div class="alltitle">实时消费记录</div>
<div class="wrap">
<ul>
<li>
<p>1:凯文童鞋 - 支付宝支付 - 120元 - XXX门店</p>
</li>
<li>
<p>2:李云龙 - 支付宝支付 - 120元 - XXX门店</p>
</li>
<li>
<p>3:岳云鹏 - 支付宝支付 - 120元 - XXX门店</p>
</li>
<li>
<p>4:刘亦菲 - 支付宝支付 - 120元 - XXX门店</p>
</li>
<li>
<p>5:周杰伦 - 支付宝支付 - 120元 - XXX门店</p>
</li>
<li>
<p>6:刘德华 - 支付宝支付 - 120元 - XXX门店</p>
</li>
</ul>
</div>
<div class="boxfoot"></div>
</div>
</li>
</ul>
</div>
<div class="back"></div>
JS
<script type="text/javascript">
$(document).ready(function () {
myChart1.resize();
myChart2.resize();
myChart3.resize();
myChart6.resize();
myChart7.resize();
myChart8.resize();
})
window.addEventListener("resize", function () {
myChart1.resize();
myChart2.resize();
myChart3.resize();
myChart6.resize();
myChart7.resize();
myChart8.resize();
});
</script>
<script type="text/javascript">
var v0 = 1000;
var v1 = 353;
var v2 = 178;
var v3 = 68;
var myChart6 = echarts.init(document.getElementById('echarts6'));
option6 = {
series: [{
type: 'pie',
radius: ['70%', '80%'],
color: '#0088cc',
label: {
normal: {
position: 'center'
}
},
data: [{
value: v1,
name: '新增会员',
label: {
normal: {
formatter: v1 + '',
textStyle: {
fontSize: 20,
color: '#fff',
}
}
}
},
{
value: v0,
name: '老会员',
label: {
normal: {
formatter: function (params) {
return '占比' + Math.round(v1 / v0 * 100) + '%'
},
textStyle: {
color: '#aaa',
fontSize: 12
}
}
},
itemStyle: {
normal: {
color: 'rgba(255,255,255,.2)'
},
emphasis: {
color: '#fff'
}
},
}]
}]
};
var myChart7 = echarts.init(document.getElementById('echarts7'));
option7 = {
series: [{
type: 'pie',
radius: ['70%', '80%'],
color: '#fccb00',
label: {
normal: {
position: 'center'
}
},
data: [{
value: v2,
name: '新增领卡会员',
label: {
normal: {
formatter: v2 + '',
textStyle: {
fontSize: 20,
color: '#fff',
}
}
}
},
{
value: v0,
name: '总领卡会员',
label: {
normal: {
formatter: function (params) {
return '占比' + Math.round(v2 / v0 * 100) + '%'
},
textStyle: {
color: '#aaa',
fontSize: 12
}
}
},
itemStyle: {
normal: {
color: 'rgba(255,255,255,.2)'
},
emphasis: {
color: '#fff'
}
},
}]
}]
};
var myChart8 = echarts.init(document.getElementById('echarts8'));
option8 = {
series: [{
type: 'pie',
radius: ['70%', '80%'],
color: '#62b62f',
label: {
normal: {
position: 'center'
}
},
data: [{
value: v3,
name: '女性客户',
label: {
normal: {
formatter: v3 + '',
textStyle: {
fontSize: 20,
color: '#fff',
}
}
}
}, {
value: v0,
name: '男性客户',
label: {
normal: {
formatter: function (params) {
return '占比' + Math.round(v2 / v0 * 100) + '%'
},
textStyle: {
color: '#aaa',
fontSize: 12
}
}
},
itemStyle: {
normal: {
color: 'rgba(255,255,255,.2)'
},
emphasis: {
color: '#fff'
}
},
}]
}]
};
setTimeout(function () {
myChart6.setOption(option6);
myChart7.setOption(option7);
myChart8.setOption(option8);
}, 500);
</script>
<script type="text/javascript">
var myChart1 = echarts.init(document.getElementById('echarts1'));
var v1 = 298;
var v2 = 523;
var v3 = v1 + v2;
option1 = {
series: [{
type: 'pie',
radius: ['70%', '80%'],
color: '#0088cc',
label: {
normal: {
position: 'center'
}
},
data: [{
value: v1,
name: '平均单客价',
label: {
normal: {
formatter: v3 + '',
textStyle: {
fontSize: 20,
color: '#fff',
}
}
}
},
]
}]
};
var myChart3 = echarts.init(document.getElementById('echarts3'));
var v1 = 298
var v2 = 523
var v3 = v1 + v2
option2 = {
series: [{
type: 'pie',
radius: ['70%', '80%'],
color: '#fccb00',
label: {
normal: {
position: 'center'
}
},
data: [{
value: v1,
name: '男性客户',
label: {
normal: {
formatter: v1 + '',
textStyle: {
fontSize: 20,
color: '#fff',
}
}
}
}, {
value: v2,
name: '女性客户',
label: {
normal: {
formatter: function (params) {
return '占比' + Math.round(v1 / v3 * 100) + '%'
},
textStyle: {
color: '#aaa',
fontSize: 12
}
}
},
itemStyle: {
normal: {
color: 'rgba(255,255,255,.2)'
},
emphasis: {
color: '#fff'
}
},
}]
}]
};
var myChart2 = echarts.init(document.getElementById('echarts2'));
option3 = {
series: [{
type: 'pie',
radius: ['70%', '80%'],
color: '#62b62f',
label: {
normal: {
position: 'center'
}
},
data: [{
value: v2,
name: '女性客户',
label: {
normal: {
formatter: v2 + '',
textStyle: {
fontSize: 20,
color: '#fff',
}
}
}
}, {
value: v1,
name: '男性客户',
label: {
normal: {
formatter: function (params) {
return '占比' + Math.round(v2 / v3 * 100) + '%'
},
textStyle: {
color: '#aaa',
fontSize: 12
}
}
},
itemStyle: {
normal: {
color: 'rgba(255,255,255,.2)'
},
emphasis: {
color: '#fff'
}
},
}]
}]
};
setTimeout(function () {
myChart1.setOption(option1);
myChart2.setOption(option2);
myChart3.setOption(option3);
}, 500);
</script>
<script type="text/javascript">