echarter: ECharts的R语言接口(一)

浏览: 2361

作者: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)

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 = '演示数据')

4.2.2 ec_legend

echart(opt) %>%
 ec_legend(
   top = 'middle', right = 'right',
   data = list(list(name = 'Apple', icon = 'circle')),
   textStyle = list(color = 'contrastColor'))

4.2.3 ec_backgroundColor

echart(opt) %>%
 ec_backgroundColor(c('#24273e'))

4.2.4 ec_colors

echart(opt) %>%
 ec_colors(c('#247ba0', '#70c1b3', '#b2dbbf'))

公众号后台回复关键字即可学习

回复 爬虫             爬虫三大案例实战  
回复 Python        1小时破冰入门

回复 数据挖掘      R语言入门及数据挖掘
回复 人工智能      三个月入门人工智能
回复 数据分析师   数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册