echarts画图实例讲解

前两天分享了一个项目(http://hyuhan.com/2016/11/17/A-data-display-platform/),里面用到了echarts(一个纯Javascript的图表库)来画图,项目中用到了它的字符云图,地图,柱状图,饼图等,今天就给大家分享一些一些实现的细节。建议先去看看五分钟上手Echarts再来看这篇博客。

地图

Echarts百度地图扩展,可以在百度地图上进一步展现点图,线图,热力图等,我主要在百度地图上展现的是气泡图。

引入百度地图

  • 首先引入百度地图的jssdk,需要使用在百度地图开发者平台申请的ak
  • 然后引入Echarts
  • 最后引入百度地图扩展bmap(已经打包在echarts包中)
<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>

设置参数

百度地图引入之后,主要就是设置参数了,以我画的最喜爱建筑分布图为例:

option = {
    // 设置标题样式
    title: {
        // 标题文本
        text: '学生最喜爱学校建筑分布',
        // 标题离容器左侧的距离,center表示水平居中
        left: 'center',
        top: 15, 
        // 标题文本的样式设置
        textStyle: {
            fontSize: 24,
            fontFamily: 'Helvetica',
            fontWeight: 400
        }
    },
    // 提示框设置为由数据项图形触发
    tooltip: {
        trigger: 'item'
    },
    // 添加保存为图片和数据视图工具工具栏
    toolbox: {
        feature: {
            saveAsImage: {},
            dataView: {}
        },
        right: 15,
        top: 10
    },
    // 加载bmap组件
    bmap: {
        // 百度地图中心经纬度(设置为你需要的地图中心即可)
        center: [114.427877, 30.517249],
        // 百度地图缩放比例(按需配置)
        zoom: 15,
        // 是否开启拖拽缩放
        roam: true,
        // 设置百度地图样式(可参考http://developer.baidu.com/map/jsdevelop-11.htm)
        mapStyle: {
            style: 'light'
        }
    },

    series: [
        {
            name: '最喜爱建筑',
            // 图标类型设置为气泡图
            type: 'scatter',
            // 设置坐标系为前面提到的bmap
            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文件并引入

<script src="echarts.min.js"></script>
<script src="echarts-wordcloud.min.js"></script>

webpack引入

npm install echarts-wordcloud
import echarts from 'echarts'
import 'echarts-wordcloud'

设置参数

option = {
    title: {
        text: title,
        textStyle: {
            fontSize: 26,
            fontFamily: 'Helvetica',
            fontWeight: 400
        },
        left: 'center',
        top: 20
    },
    toolbox: {
        feature: {
            saveAsImage: {},
            dataView: {}
        },
        right: 20,
        top: 20
    },
    series: [{
        // 设置图表类型为'wordCloud'
        type: 'wordCloud',
        // 设置cloud的形状
        shape: 'cardioid',
        // shape: 'pentagon',
        // shape: 'circle',
        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选项,name即为显示的字符,value越大字符字体大小越大
        data: [{
            name: '',
            value: ,   
            textStyle: {
                normal: {},
                emphasis: {}
            }
        },{...},...]
    }]   
}

画热力图

根据班级群聊数据分析出来的同学之间亲密度,思前想后最后决定用热力图。热力图不需要额外的插件,直接讲参数设置。

参数设置

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%'
    },
    // x轴设置
    xAxis: {
        // 坐标轴为类目轴
        type: 'category',
        // 数组,x轴显示的刻度标签
        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: '亲密度',
            // 图标类型为heatmap
            type: 'heatmap',
            // 二维数组,每个数据项都是一个一维的数组,前两个值表示直角坐标系上的x,y,第三个至表示大小。
            data: [[0,0,2],[]...],
            label: {
                normal: {
                  show: true
                }
            },
            itemStyle: {
                emphasis: {
                    shadowBlur: 10,
                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                }
            }
        }
    ]
}

饼图和条形图比较基础,可以参考官方实例,建议仔细阅读官方配置文档,可以自己画出各种有趣的图形来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 各位小伙伴们大家好,今天我向大家介绍一下苹果百度地图的使用方法,因为做过一些想关的APP,感觉百度地图还是挺方便的...
    Lee0528阅读 14,618评论 18 46
  • 气温骤降,毫无预兆,我也在坚持减肥1个月后停下了脚步,原因很简单我感冒了....好无奈,并且我每次感冒都有一个习惯...
    白令海峡阅读 187评论 7 0
  • 昨天玩得还算尽兴。上午去了图书馆,中午就和舍友们一起去吃饭,不过。糖水好难吃。后来在看电影之前我又去道茶轩买了杯柠...
    大大大未至阅读 400评论 0 3