R语言可以绘制ECharts交互式图表啦!

2022-03-29 13:44:06 浏览数 (1)

导语

GUIDE ╲

ECharts是一个基于JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器。recharts是开发者根据ECharts2开发的一个R语言接口,它使我们可以用R语言实现ECharts作图。

简介

recharts具有丰富的功能,提供的图形展示包括:地图(eMap),柱状图(eBar),折线图(eLine), 雷达图(eRadar),散点图(ePoints),漏斗图(eFunnel)以及万恶的饼图(ePie)。同时计划对力导向图(eForce), 时间序列散点图(ePoints_timeSeries), 矩阵树图(eTree), 平行坐标图(eParallel) 和桑基图(eSankey)图等。

基于Echarts3的recharts2包仍在开发中。

recharts安装

代码语言:javascript复制
###通过github安装recharts包
library(devtools)
install_github("madlogos/recharts")
library(recharts)

recharts使用教程

01

数据展示

代码语言:javascript复制
head(mtcars)

02

core plot

代码语言:javascript复制
##使用echartr创建基础图表
echartr(mtcars, wt, mpg)
代码语言:javascript复制
##分配权重,生成气泡图
echartr(mtcars, wt, mpg, am, weight=gear, type='bubble')

多参数混合

代码语言:javascript复制
g %>% setSeries(series=2, symbolSize=8, symbolRotate=30) %>% 
  ##标线
  addMarkLine(data=data.frame(type='average', name1='Avg')) %>%
  ##标注最大值
  addMarkPoint(series=1, data=data.frame(type='max', name='Max')) %>%
  ##写入图题
  setTitle('wt vs mpg', paste0('[Motor Trend](', link, ')'), 
           textStyle=list(color='red')) %>%
  ##修改图例
  setLegend(selected='Automatic', textStyle=list(color='lime')) %>%
  ##垂直放置工具箱,并且修改为英文
  setToolbox(lang='en', pos=2) %>% 
  ##添加datazoom
  setDataZoom() %>% 
  ##修改主题
  setTheme('dark', calculable=TRUE) %>% 
  ##symbol形状
  setSymbols(c('heart', 'star6'))

03

混合图表的绘制

代码语言:javascript复制
#先改造一下数据集
d <- data.table::dcast(mtcars, carb gear~., mean, value.var='mpg')
names(d)[3] <- 'mean.mpg'
d$carb <- as.character(d$carb)
#柱状图和折线图混合
echartr(d, carb, "mean.mpg", gear, type=c('vbar', 'vbar', 'line')) %>% 
  setSymbols('emptycircle')

在图片右上角的操作板上可以选择单独查看柱状图、折线图或者原始数据。

04

雷达图绘制

代码语言:javascript复制
##创建一个数据集
d1 <- data.frame(x=rep(LETTERS[1:6], 4), y=abs(rnorm(24)), 
                 f=c(rep('i', 12), rep('ii', 12)), 
                 s=rep(c(rep('I', 6), rep('II', 6)), 2))
echartr(d1, x, y, s, facet=f, type='radar', 
        subtype=list(c('fill', ''), c('', 'fill')))

05

和弦图绘制

由于ECharts支持多种类型的图表,可能还需要一段时间的开发才能使echartr()真正变得更加智能。 由于ECharts的主要用法是将JavaScript对象传递给方法.setOption(),在R中可以使用列表来构造这样的对象。通过echart.list()方法可以创建任意图表。

使用list去构建数据集,内部包含绘图所需的各个参数。

代码语言:javascript复制
#通过list去构建数据集
chordEx1 = list(
  title = list(
    text = '测试数据',
    subtext = 'From d3.js',
    x = 'right',
    y = 'bottom'
  ),
  tooltip = list(
    trigger = 'item',
    formatter = JS('function(params) {
      if (params.indicator2) { // is edge
        return params.value.weight;
      } else {// is node
        return params.name
      }
    }')
  ),
  toolbox = list(
    show = TRUE,
    feature = list(
      restore = list(show = TRUE),
      magicType = list(show = TRUE, type = c('force', 'chord')),
      saveAsImage = list(show = TRUE)
    )
  ),
  legend = list(
    x = 'left',
    data = c('group1', 'group2', 'group3', 'group4')
  ),
  series = list(
    list(
      type = 'chord',
      sort = 'ascending',
      sortSub = 'descending',
      showScale = TRUE,
      showScaleText = TRUE,
      data = list(
        list(name = 'group1'),
        list(name = 'group2'),
        list(name = 'group3'),
        list(name = 'group4')
      ),
      itemStyle = list(
        normal = list(
          label = list(show = FALSE)
        )
      ),
      matrix = rbind(
        c(11975,  5871, 8916, 2868),
        c( 1951, 10048, 2060, 6171),
        c( 8010, 16145, 8090, 8045),
        c( 1013,   990,  940, 6907)
      )
    )
  )
)

echart(chordEx1)

06

南丁格尔玫瑰图

代码语言:javascript复制
str(Titanic)
# 表格按行求和,再进行转换长表达
titanic <- data.table::melt(apply(Titanic, c(1,4), sum))
# 定义列名
names(titanic) <- c('Class', 'Survived', 'Count')
# knitr格式化表达
knitr::kable(titanic)
echartr(titanic, Class, Count, facet=Survived, type='rose', subtype='radius')

文章主要参考:

recharts官网:https://madlogos.github.io/recharts/#-en

小编总结

recharts包虽然仍在开发完善的过程中,但是已经具备了十分强大的交互式可视化功能,小编在这里展示了一些常用图形的绘制函数,仍有很多绘图功能需要大家的继续发掘!在这里也一起期待一下recharts2的问世吧!

0 人点赞