ECharts,是百度的一个开源的数据可视化工具,一个纯 Javascript 的图表库。echarts4r 包是 ECharts 的 R 语言接口,目前可以从 CRAN 是直接安装。echarts4r 语法结构简单,易用,可读性很好,是很好的交互式绘图包。
本文介绍 echarts4r 的常规交互式图形,交互式图形可以用在 rmarkdown 和 shiny 应用中。
环境&软件
-
win10 64bit
-
R 3.6.1
安装包
install.packages("echarts4r")
散点图
echarts4r 作图第一步用e_charts
函数创建一个 echarts4r 对象,函数第一个参数为数据,第二个参数为 x 轴数据,第二步以及后续都是用%>%
管道操作符来进一步作图。
绘制散点图,用iris
数据,x 轴为 Sepal.Length。y 轴为 Petal.Length,在e_scatter
中定义为serie
。通过group_by
根据 Sepal.Length 进行分组,在图中表现为不同颜色。散点大小通过size
参数设置。
library(echarts4r)
iris %>%
group_by(Species) %>%
e_charts(x = Sepal.Length) %>%
e_scatter(serie = Petal.Length, size = Sepal.Width)
对比一下 ggplot2 的散点图语法。
library(ggplot2)
iris %>%
ggplot(aes(x=Sepal.Length,y=Petal.Length,size=Sepal.Width,col=Species))+
geom_point()
柱状图
df <- data.frame(
x = seq(50),
y = rnorm(50, 10, 3),
z = rnorm(50, 11, 2),
w = rnorm(50, 9, 2)
)
df %>%
e_charts(x) %>%
e_bar(y, name = "bar") %>%
e_title("Bar and step charts")
极坐标图
df %>%
e_charts(x) %>%
e_polar() %>%
e_angle_axis(x) %>% # angle = x
e_radius_axis() %>%
e_bar(y, coord_system = "polar") %>%
e_scatter(z, coord_system = "polar")
漏斗图
funnel <- data.frame(stage = c("View", "Click", "Purchase"), value = c(80, 30, 20))
funnel %>%
e_charts() %>%
e_funnel(value, stage) %>%
e_title("Funnel")
热力图
v <- LETTERS[1:10]
matrix <- data.frame(
x = sample(v, 300, replace = TRUE),
y = sample(v, 300, replace = TRUE),
z = rnorm(300, 10, 1),
stringsAsFactors = FALSE
) %>%
dplyr::group_by(x, y) %>%
dplyr::summarise(z = sum(z)) %>%
dplyr::ungroup()
matrix %>%
e_charts(x) %>%
e_heatmap(y, z) %>%
e_visual_map(z) %>%
e_title("Heatmap")
日历图
dates <- seq.Date(as.Date("2017-01-01"), as.Date("2018-12-31"), by = "day")
values <- rnorm(length(dates), 20, 6)
year <- data.frame(date = dates, values = values)
year %>%
e_charts(date) %>%
e_calendar(range = "2018") %>%
e_heatmap(values, coord_system = "calendar") %>%
e_visual_map(max = 30) %>%
e_title("Calendar", "Heatmap")
仪表盘
e_charts() %>%
e_gauge(41, "PERCENT") %>%
e_title("Gauge")
雷达图
df <- data.frame(
x = LETTERS[1:5],
y = runif(5, 1, 5),
z = runif(5, 3, 7)
)
df %>%
e_charts(x) %>%
e_radar(y, max = 7, name = "radar") %>%
e_radar(z, max = 7, name = "chart") %>%
e_tooltip(trigger = "item")
词云
words <- function(n = 5000) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
tf <- data.frame(terms = words(100),
freq = rnorm(100, 55, 10)) %>%
dplyr::arrange(-freq)
tf %>%
e_color_range(freq, color) %>%
e_charts() %>%
e_cloud(terms, freq, color, shape = "circle", sizeRange = c(3, 15)) %>%
e_title("Wordcloud", "Random strings")