欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
作者:JeevanYue R语言中文社区专栏作者
知乎ID:https://www.zhihu.com/people/jeevanyue
GitHub:https://github.com/jeevanyue
前言
我之前主要使用Joshua Kunst 的highcharter做交互式数据可视化,highcharter是highcharts的R语言接口,但highcharter不对highcharts的配置项做重新的定义,基本根据highcharts的API来实现,可以很方便 的使用highcharts官方丰富的教程和案例,以及各种社区帮助,用起来真的非常方便的。
最近我们公司将为客户提供Dashboard数据展示,我是用highcharter做了可视化Demo,但是因为highcharts商用收费,所以开发团队使用了百度的ECharts来实现。
为了跟开发同事更好交流沟通,让生产实现与Demo更贴近,所以我想到ECharts也有R语言接口,最后在Github找到下面这么多实现ECharts的R语言接口。
cosname/recharts - ECharts4
JohnCoene/echarts4r - ECharts4
yihui/recharts - ECharts2
madlogos/recharts - ECharts2 forked from yihui/recharts
madlogos/recharts2 - ECharts3
ChanningWong/REcharts3 - ECharts3
XD-DENG/ECharts2Shiny - ECharts3
ECharts的R语言接口真的挺多的,我重点看了前两个包,因为都是基于最新的ECharts4,作者没有弃坑,最近也有更新维护。但是在学习应用这两个包的过程中发现,为了实现某个案例,自己要学习两个接口,ECharts的R语言接口和ECharts的API配置项,并且要不停相互比对。并且在ECharts社区中找到的帮助,常常在R语言接口无法实现。
弄到最后,我已经对ECharts的API配置项比较熟悉了,后来我就决定尝试开发一个ECharts的R语言接口,毕竟我也用了挺多htmlwidgets,但从来没有自己动手开发过一个。所以主要参考highcharter对highcharts的实现方式,开始着手开发echarter
。取名为echarter
,也是为了向highcharter
致敬。
并且还参考学习了cosname/recharts和JohnCoene/echarts4r的ECharts实现方式。
欢迎大家指正。
1.介绍
echarter是ECharts的R语言接口实现,ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
ECharts特性:
丰富的可视化类型
多种数据格式无需转换直接使用
千万数据的前端展现
移动端优化
多渲染方案,跨平台使用
深度的交互式数据探索
多维数据的支持以及丰富的视觉编码手段
动态数据
绚丽的特效
…
2.echarter的安装
echarter包的源代码发布在Github,jeevanyue/echarter,可通过下列代码安装。
devtools::install_github("jeevanyue/echarter")
3.官方案例
echartsExample取自于cosname/recharts。
echartsExample提供了一种从官网的官方实例中获取JS代码并运行的途径, 除去某些需要加载JSON数据文件的例子, echartsExample`支持大部分Echarts的官网案例.
这个函数支持的范围比较广, 包括Echarts的基本绘图, ecstat, bamap等高级功能, 是JS代码的源生接口
参数:
url 例子的网址, 比如
’http://echarts.baidu.com/demo.html#bubble-gradient’
JScontent 需要执行的JS代码(方便复制例子里面的代码调试执行), 注意要命名一个option对象用于数据加载
height 绘图区域的高度
weight 绘图区域的宽度, 支持百分比
从http://echarts.baidu.com/demo.html#effectScatter-bmap 获取代码, 并转换为R绘图.
library(tidyverse)library(echarter)url = "http://echarts.baidu.com/examples/editor.html?c=bar-tick-align"echartsExample(url)
![3901436-eb991a9d1027bffc](https://i-blog.csdnimg.cn/blog_migrate/d8abad409c567a3f3c14437ec640d8b1.webp?x-image-process=image/format,png)
4.API函数
4.1演示数据
library(tidyverse)library(lubridate)library(echarter)weekDays <- c('Mon','Tues','Wed','Thurs','Fri','Sat','Sun')dat <- data.frame( saleNum = round(runif(21, 20, 100), 0), fruit = c(rep("Apple", 7), rep("Pear", 7), rep("Banana", 7)), weekDay = c(rep(weekDays,3)), price = round(runif(21, 10, 20), 0), stringsAsFactors = FALSE)dat_list <- dat %>% select(-price) %>% spread(weekDay, saleNum) %>% unite("value", c('Mon','Tues','Wed','Thurs','Fri','Sat','Sun'))dat_list$value <- lapply(1:3, function(x){ as.numeric(strsplit(dat_list$value, "_")[[x]])})## echart从0开始索引dat_matrix <- data.frame( fruit = as.numeric(factor(c(dat$fruit), levels = c('Apple', 'Pear', 'Banana'))) - 1, weekDay = as.numeric(factor(c(dat$weekDay), levels = c('Mon','Tues','Wed','Thurs','Fri','Sat','Sun'))) - 1, saleNum = dat$saleNum) %>% as.matrix()dat_date <- data.frame( date = as.Date('2017-01-01') + seq(0,364), value = round(runif(365, 0, 1000), 0), stringsAsFactors = FALSE)AQI <- read.csv("data/AQI.csv")dat_geo <- AQI %>% select(城市, lng, lat, AQI) opt = list( xAxis = list( show = TRUE, type = 'category', name = '星期', data = c('Mon','Tues','Wed','Thurs','Fri','Sat','Sun')), yAxis = list( show = TRUE, type = 'value'), series = list( list( type = 'line', name = 'Apple', data = c(12, 5, 20, 36, 10, 10, 20))))
4.2基础组件
4.2.1 ec_title
echart(opt, elementId = "ec") %>% ec_title(text = '演示数据')
![3901436-d0c00835104b14ee](https://i-blog.csdnimg.cn/blog_migrate/12af69ad8a5fa75716deb34e2f3192f2.webp?x-image-process=image/format,png)
4.2.2 ec_legend
echart(opt) %>% ec_legend( top = 'middle', right = 'right', data = list(list(name = 'Apple', icon = 'circle')), textStyle = list(color = 'contrastColor'))
![3901436-e5a992de939c99ea](https://i-blog.csdnimg.cn/blog_migrate/4d5b721c9dd236c1d6f3bbb7f424b1f8.webp?x-image-process=image/format,png)
4.2.3 ec_backgroundColor
echart(opt) %>% ec_backgroundColor(c('#24273e'))
![3901436-8a8172e2616e093e](https://i-blog.csdnimg.cn/blog_migrate/28ab7bb14ccfab4c35a2491ba08e2eaf.webp?x-image-process=image/format,png)
4.2.4 ec_colors
echart(opt) %>% ec_colors(c('#247ba0', '#70c1b3', '#b2dbbf'))
![3901436-602d6475ec1ec839](https://i-blog.csdnimg.cn/blog_migrate/abf368d692d7de49a77d244f39f03b2b.webp?x-image-process=image/format,png)
![3901436-4a177d49e8ccdf64](https://i-blog.csdnimg.cn/blog_migrate/d81b2d372fff47eb349178be817d507e.webp?x-image-process=image/format,png)
![3901436-fdbb4f0327a3e57a](https://i-blog.csdnimg.cn/blog_migrate/939c8a88c4059bd6f16c6397bb87c23d.webp?x-image-process=image/format,png)
公众号后台回复关键字即可学习
回复 爬虫 爬虫三大案例实战
回复 Python 1小时破冰入门回复 数据挖掘 R语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法 常用数据挖掘算法