前两天分享了一个项目(http://hyuhan.com/2016/11/17/A-data-display-platform/),里面用到了echarts(一个纯Javascript的图表库)来画图,项目中用到了它的字符云图,地图,柱状图,饼图等,今天就给大家分享一些一些实现的细节。建议先去看看五分钟上手Echarts再来看这篇博客。
地图
Echarts百度地图扩展,可以在百度地图上进一步展现点图,线图,热力图等,我主要在百度地图上展现的是气泡图。
引入百度地图
- 首先引入百度地图的jssdk,需要使用在百度地图开发者平台申请的ak
- 然后引入Echarts
- 最后引入百度地图扩展bmap(已经打包在echarts包中)
1 2 3
| <script src="http://api.map.baidu.com/api?v=2.0&ak=你的ak"></script> <script src="echarts/dist/echarts.min.js"></script> <script src="echarts/dist/extension/bmap.min.js"></script>
|
设置参数
百度地图引入之后,主要就是设置参数了,以我画的最喜爱建筑分布图为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| option = { title: { text: '学生最喜爱学校建筑分布', left: 'center', top: 15, textStyle: { fontSize: 24, fontFamily: 'Helvetica', fontWeight: 400 } }, tooltip: { trigger: 'item' }, toolbox: { feature: { saveAsImage: {}, dataView: {} }, right: 15, top: 10 }, bmap: { center: [114.427877, 30.517249], zoom: 15, roam: true, mapStyle: { style: 'light' } }, series: [ { name: '最喜爱建筑', type: 'scatter', coordinateSystem: 'bmap', data: [{}], symbolSize: , label: { normal: { formatter: '{b}', position: 'right', show: true }, emphasis: { show: true } }, itemStyle: { normal: { color: 'rgba(11, 110, 72, 1)' } } }, ] }
|
另外给大家推荐一个百度的拾取坐标系统,挺好用的。
字符云图
之前一直觉得字符云是个很酷炫的东西,所以这次也就强行把它用上了,嘿嘿。里面的数据是我根据群聊记录分析出来的高频词汇。Echarts的字符云是基于wordcloud2.js的。
引入字符云
直接下载js文件并引入
1 2
| <script src="echarts.min.js"></script> <script src="echarts-wordcloud.min.js"></script>
|
webpack引入
1
| npm install echarts-wordcloud
|
1 2
| import echarts from 'echarts' import 'echarts-wordcloud'
|
设置参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| option = { title: { text: title, textStyle: { fontSize: 26, fontFamily: 'Helvetica', fontWeight: 400 }, left: 'center', top: 20 }, toolbox: { feature: { saveAsImage: {}, dataView: {} }, right: 20, top: 20 }, series: [{ type: 'wordCloud', shape: 'cardioid', left: 'center', top: 30, width: '75%', height: '80%', sizeRange: [12, 75], rotationRange: [-90, 90], rotationStep: 45, gridSize: 8, textStyle: { normal: { fontFamily: 'Microsoft Yahei', fontWeight: 'bold', color: function() { return 'rgb(' + [ Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160) ].join(',') + ')' } }, emphasis: { shadowBlur: 10, shadowColor: '#333' } }, data: [{ name: '', value: , textStyle: { normal: {}, emphasis: {} } },{...},...] }] }
|
画热力图
根据班级群聊数据分析出来的同学之间亲密度,思前想后最后决定用热力图。热力图不需要额外的插件,直接讲参数设置。
参数设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| option = { title: { text: '通信1502班同学关系密切度分析图(仅通过群聊数据分析)', subtext: '数值越大两者越亲密', subtextStyle: { fontSize: 16 }, left: 'center', top: 4, textStyle: { fontSize: 22, fontFamily: 'Helvetica', fontWeight: 400 } }, tooltip: { trigger: 'item' }, toolbox: { feature: { saveAsImage: {}, dataView: {} }, right: 15 }, grid: { height: '78%', bottom: '14%' }, xAxis: { type: 'category', data: [...], axisLabel: { rotate: 60, interval: 0 }, splitArea: { show: true } }, yAxis: { type: 'category', data: [...], splitArea: { show: true } }, visualMap: { min: 0, max: 100, calculable: true, itemheight: 300, orient: 'horizontal', left: 'center', bottom: '3%' }, series: [ { name: '亲密度', type: 'heatmap', data: [[0,0,2],[]...], label: { normal: { show: true } }, itemStyle: { emphasis: { shadowBlur: 10, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }
|
饼图和条形图比较基础,可以参考官方实例,建议仔细阅读官方配置文档,可以自己画出各种有趣的图形来。
本文总阅读量:次