微信小说分销系统设计之使用百度Echarts地图统计功能统计微信粉丝地域分布情况
/** 转载请保留博客园原地址以及版权声明,请勿恶意修改,本博客中的内容均属于技术交流,请勿用于商业用途,谢谢配合
* 作者:杨浩瑞 QQ:1420213383 独立博客:http://www.yxxrui.cn
* 【后台】http://xiaoshuo.qqsiot.cn/manager 【前台】http://y6.qqsiot.cn
* 管理员账号:admin 渠道商账号:channel 代理商账号:agent 演示密码:123456
**/
使用百度echarts插件来制作地图分布统计图,更加方便分析和理解用户行为,对症下药才能起到最好的疗效,哈哈哈,效果怎么样,看看就知道了
先展示出来一个地图,上边显示所有省份的全部情况,然后点击某个省份的时候,使用post请求后台,获取对应省份的城市分别的人数,然后生成城市分布柱状图,后台程序比较简单,就是获取城市和人数,不得不说echarts是一个非常好用的工具,我记得15年大四的时候在一家公司实训,做过一个类似的统计,当时有一些朋友在使用flash来写,后来接触了echats之后,感觉flash就是个垃圾,为百度顶一个,具体效果也可以到演示站中看,下期讲一下条形统计图
<script src="/Content/Share/js/echarts-all.js"></script> <script src="/Content/Share/novel.js"></script> <div id="content-header"> <div id="breadcrumb"> <a href="#" title="Go to Home" class="tip-bottom"> <i class="icon-home"></i> Home </a> <a href="#" class="current">用户分布</a> </div> </div> <div class="container-fluid data-stat"> <div class="row-fluid"> <a href="/Manager/AgentDatas/Index" class="btn">订单统计</a><!-- --><a href="/Manager/AgentDatas/User" class="btn">用户统计</a><!-- --><a href="/Manager/AgentDatas/Novel" class="btn">小说统计</a><!-- --><a href="/Manager/DataCharts/OrderDatas" class="btn">订单趋势</a><!-- --><a href="/Manager/DataCharts/UserDatas" class="btn">用户趋势</a><!-- --><a href="/Manager/DataCharts/UserAreaDatas" class="btn btn-primary">用户分布</a> </div> </div> <br /> <div id="userMap" style="height: 400px; width: 94%;"></div> <div id="two" style="height:400px; width:94%;"></div> <script type="text/javascript"> var acid = '@ViewBag.acid'; // 基于准备好的dom,初始化echarts实例 var userMapChart = echarts.init(document.getElementById('userMap')); var myChart2 = echarts.init(document.getElementById('two')); userMapChart.showLoading({ text: '正在努力的读取数据中...' //loading话术 }); userMapChart.on('click', function (param) { dealCityPost(param.name); }); function dealCityPost(name) { $.post('/Manager/DataCharts/UserCityMapJson', { acid: acid, name: name }, function (d) { //console.log(JSON.stringify(d)); if (d.code == 0) { dealChart2(name, d.data); } }); } $.post('/Manager/DataCharts/UserProvinceMapJson', { acid: acid }, function(d) { //console.log(JSON.stringify(d)); if (d.code == 0) { dealChart(d.data); //默认显示浙江省 dealCityPost('浙江'); } }); var provinces = [ '北京', '天津', '上海', '重庆', '河北', '河南', '云南', '辽宁', '黑龙江', '湖南', '安徽', '山东', '新疆', '江苏', '浙江', '江西', '湖北', '广西', '甘肃', '山西', '内蒙古', '陕西', '吉林', '福建', '贵州', '广东', '青海', '西藏', '四川', '宁夏', '海南', '台湾', '香港', '澳门' ]; function getMaxValue(data) { var max = 0; for (var i in data) { if (data[i].value > max && $.inArray(data[i].name, provinces) != -1) { max = data[i].value; } } return max; } function dealChart(datas) { userMapChart.hideLoading(); var option = { title: { text: '用户省份分布统计', subtext: '', x: 'center' }, tooltip: { trigger: 'item' }, dataRange: { min: 0, max: getMaxValue(datas), x: 'right', y: 'bottom', text: ['高', '低'], // 文本,默认为数值文本 calculable: true, color: ['#BD0707','#FFD2D2'] }, series: [ { name: '中国', type: 'map', mapType: 'china', roam: false, itemStyle: { normal: { label: { show: true } }, emphasis: { label: { show: true } } }, data: datas } ] }; userMapChart.setOption(option); } function dealChart2(name, datas) { var citys = []; var nums = []; for (var i in datas) { var data = datas[i]; citys[i] = data.name; nums[i] = data.value; } myChart2.showLoading({ text: '正在努力的读取数据中...', //loading话术 }); myChart2.hideLoading(); var option2 = { title: { text: name+'省各城市用户人数', x: 'center' }, legend: { // 图例配置 padding: 5, // 图例内边距,单位px,默认上下左右内边距为5 itemGap: 10, // Legend各个item之间的间隔,横向布局时为水平间隔,纵向布局时为纵向间隔 data: [name+'省'], x: 'center', y: 'bottom' }, tooltip: { // 气泡提示配置 trigger: 'item', // 触发类型,默认数据触发,可选为:'axis' }, xAxis: [ // 直角坐标系中横轴数组 { type: 'category', // 坐标轴类型,横轴默认为类目轴,数值轴则参考yAxis说明 data: citys } ], yAxis: [ // 直角坐标系中纵轴数组 { type: 'value', // 坐标轴类型,纵轴默认为数值轴,类目轴则参考xAxis说明 boundaryGap: [0.1, 0.1], // 坐标轴两端空白策略,数组内数值代表百分比 splitNumber: 6 // 数值轴用,分割段数,默认为5 } ], series: [ { name: name+'省', // 系列名称 type: 'bar', // 图表类型,折线图line、散点图scatter、柱状图bar、饼图pie、雷达图radar itemStyle: { normal: { label: { show: true } } }, data: nums } ] }; myChart2.clear(); myChart2.setOption(option2); } $(function () { $('#userMapMenu').addClass("active"); $('#dataMenu > a').trigger('click'); }); </script>
事不难无以识英雄,磨难出雄才,如有疑问可留言或邮件,我的独立博客http://www.yxxrui.cn