echarts4r 包封装 Echarts Javascript 图表库,这使得我们可以使用 R 语言绘制各种基于 echarts.js 的交互式图表,今天我给大家分享的是水球图的绘制方法。
首先加载我们需要的 R 包:
library(echarts4r)
library(tidyverse)
我从 https://www.iconfont.cn 网站上下载了两个 SVG 图片,一个是 Apple 的 logo 一个是 Android 的 logo,可以使用文本编辑器查看他们的源代码,然后从其中找到 path://...
:
path1 "path://M662.384539 156.783881c38.396052-41.595723 63.993421-99.189802 57.594078-156.783881-54.394408 3.199671-121.587499 31.99671-163.183223 73.592434-35.196381 35.196381-67.193092 95.990131-57.594078 150.384538 60.79375 6.399342 124.78717-25.597368 163.183223-67.193091z m118.387828 393.559537c0-127.986841 102.389473-188.780591 105.589144-191.980262-57.594079-86.391118-147.184868-99.189802-179.181578-99.189802-76.792105-9.599013-150.384539 44.795394-188.780591 44.795394s-99.189802-44.795394-163.183223-44.795394c-83.191447 0-159.983552 51.194737-201.579275 127.986841-86.391118 153.58421-22.397697 383.960524 60.79375 508.747694 41.595723 60.79375 89.590789 131.186512 153.584209 127.986842 60.79375-3.199671 86.391118-41.595723 159.983552-41.595724S623.988486 1023.894731 691.181578 1023.894731s108.788815-63.993421 150.384538-124.78717c47.995066-70.392763 67.193092-140.785525 67.193092-143.985197 0 0-127.986841-51.194737-127.986841-204.778946z"
path2 "path://M204.8 395.2v265.6c0 35.2-28.8 64-64 64s-67.2-28.8-67.2-64V395.2c0-35.2 35.2-64 67.2-64 35.2 3.2 64 28.8 64 64zM230.4 752c0 38.4 28.8 67.2 67.2 67.2h44.8V960c0 83.2 124.8 83.2 124.8 0v-140.8h86.4V960c0 83.2 128 83.2 128 0v-140.8h44.8c38.4 0 67.2-28.8 67.2-67.2V344H230.4V752z m566.4-430.4H227.2c0-99.2 57.6-182.4 144-227.2l-44.8-80c-6.4-9.6 9.6-19.2 16-9.6l44.8 80c80-35.2 172.8-32 246.4 0l44.8-80c6.4-9.6 22.4-3.2 16 9.6l-44.8 80c89.6 44.8 147.2 131.2 147.2 227.2z m-390.4-124.8c0-12.8-9.6-22.4-22.4-22.4-12.8 0-22.4 9.6-22.4 22.4 0 12.8 9.6 22.4 22.4 22.4 12.8 0 22.4-9.6 22.4-22.4z m259.2 0c0-12.8-9.6-22.4-22.4-22.4s-22.4 9.6-22.4 22.4c0 12.8 9.6 22.4 22.4 22.4 12.8 0 22.4-9.6 22.4-22.4z m217.6 137.6c-35.2 0-64 28.8-64 64v265.6c0 35.2 28.8 64 64 64s67.2-28.8 67.2-64V398.4c0-38.4-35.2-64-67.2-64z"
下面我们创建一个数据框:
df column = c("Apple", "Android"), value = c(65, 35),
path = c(path1, path2)
)
df
#> # A tibble: 2 x 3
#> column value path
#>
#> 1 Apple 65 path://M662.384539 156.783881c38.396052-41.595723 63.993421-99.…
#> 2 Android 35 path://M204.8 395.2v265.6c0 35.2-28.8 64-64 64s-67.2-28.8-67.2-…
然后就可以绘制水球图了:
df %>%
e_charts(column, width = "100%") %>%
e_x_axis(
splitLine = list(show = FALSE),
axisTick = list(show = FALSE),
axisLine = list(show = FALSE),
axisLabel = list(show = FALSE)
) %>%
e_y_axis(
max = 100,
splitLine = list(show = FALSE),
axisTick = list(show = FALSE),
axisLine = list(show = FALSE),
axisLabel = list(show = FALSE)
) %>%
e_color(color = c("#69cce6", "#eee")) %>%
e_pictorial(value,
symbol = path, z = 10, name = "realValue",
symbolBoundingData = 100, symbolClip = TRUE
) %>%
e_pictorial(value,
symbol = path, name = "background",
symbolBoundingData = 100,
) %>%
e_labels(
position = "bottom", offset = c(0, 10),
textStyle = list(
fontSize = 20, fontFamily = "Arial",
fontWeight = "bold",
color = "#69cce6"
),
formatter = "{@[1]}% {@[0]}"
) %>%
e_legend(show = FALSE) %>%
e_theme("westeros")
还可以让容器里面的水波动起来。另外 echarts4r 包提供了组合多个 echarts 图表控件的函数:
library(htmlwidgets)
liquid 0.6, 0.5, 0.4),
android = c(0.5, 0.3, 0.1))
liquid %>%
e_charts() %>%
e_liquid(apple, shape = path1,
backgroundStyle = list(borderColor = '#156ACF',
borderWidth = 1,
shadowColor = 'rgba(0, 0, 0, 0.4)',
shadowBlur = 20),
outline = list(show = FALSE),
label = list(position = c('50%', '50%'),
formatter = JS("function(){return '苹果';}"),
fontSize = 20,
color = '#D94854')) -> e1
liquid %>%
e_charts() %>%
e_liquid(android, shape = path2,
backgroundStyle = list(borderColor = '#156ACF',
borderWidth = 1,
shadowColor = 'rgba(0, 0, 0, 0.4)',
shadowBlur = 20),
outline = list(show = FALSE),
label = list(position = c('50%', '50%'),
formatter = JS("function(){return '安卓';}"),
fontSize = 20,
color = '#D94854')) -> e2
e_arrange(e1, e2, rows = 1, cols = 2)
使用 manipulateWidget 包合并效果更好:
library(manipulateWidget)
combineWidgets(e1, e2, byrow = TRUE, nrow = 1,
width = "100%", height = "400px")
是不是很炫酷!
代码和相关材料获取
在公众号后台发送 liquid
即可获取~
? 线上培训班体验邀请
欢迎加入我的线上培训班学习使用 R 和 Stata 进行数据处理和可视化:你想学习使用 R & Stata 进行数据分析与可视化么?我觉得你可以加入我的线上培训班试试!
之后的课程将不再通过哔哩哔哩直播进行,那么该如何试听我的培训班的课程呢?很简单:
- 关注本公众号
RStata
,这样你能够第一时间获取课程预告和我提供的学习资源; - 转发本文至朋友圈集齐 12 个赞;
- 截图发给我,我就邀请你加入会员群进行体验(两天),期间你可以参与腾讯会议观看课程直播和进行提问。
我的微信
更多内容欢迎加入我的线上培训班获取,详情可添加我的微信咨询了解:
非诚勿扰。
推荐阅读
- 【Stata 编程导论】第三讲:函数、宏、标量和矩阵(二)
- 函数、宏、标量和矩阵(一)
- 【使用 R 语言进行地理计算】第二讲:属性数据操作
- 为小白准备的课程~ 《Stata 绘图指引》系列课程第二讲:Stata 的图形编辑器
- 指北针和比例尺来啦!使用 Stata 绘制中国市级地图~还带九段线小地图
- 《R 数据科学》系列课程第二讲:使用 ggplot2 进行数据可视化
- 上手 Stata 图表制作
- 入手 R 语言!
- 入手 Stata
- Stata 网络数据爬取:JSON 篇
- 使用 R 语言从 PDF 文档中提取表格
- 如何根据经纬度判断该地点所处的省份或者区县?(更新版)
- 如何在几秒钟内完成 Stata 外部命令的安装?
- 中国的工业企业都在哪里?—— Stata、高德接口与地理编码