本文于2020-10-10更新。 如发现问题或者有建议,欢迎提交 Issue
当我们面对大数据时候,EDA成为一个问题,静态图片的展示已经已经不能满足我们的需求,因此需要动态、交互的处理,因此产生了plotly
包来替代ggplot2
包,但是我们会认为限制与给定的facet
还不能满足我们的需求,因此产生了trelliscopejs
包,它的优点在于解除了facet
限制,是plotly
包来替代`ggplot2很好的互补。
- 这里的大数据定义是多列的数据,而非多行。因此
trelliscopejs
包的目的是高效处理数据多列数据或者多facet
的数据。
为了让大家最快理解这个包的作用,建议大家run以下代码,查看生成的交互页面。
例子来自于trelliscopejs
的help页面。由于trelliscopejs
包生成的是交互页面,在博客的静态页面中只能调用不能内置,目前没有很好的解决办法,因此剋呀尝试将这里代码在R中自己运行尝试。
- Stack Overflow 上也基于html生成方面尝试解决的探讨。
library(dplyr)
#>
#> 载入程辑包:'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(tidyr)
library(purrr)
library(rbokeh)
library(gapminder)
library(trelliscopejs)
# nest gapminder data by country
by_country <- gapminder %>%
group_by(country, continent) %>%
nest()
# add in a plot column with map_plot
by_country <- by_country %>% mutate(
panel = map_plot(data,
~ figure(xlim = c(1948, 2011), ylim = c(10, 95), width = 300, tools = NULL) %>%
ly_points(year, lifeExp, data = .x, hover = .x)
))
Created on 2018-10-20 by the reprex package (v0.2.0).
1 参数介绍
trelliscopejs
包的参数调整参考
Hafen (2018b Chapter 2) 在 DataCamp 上的教程。
library(ggplot2)
library(trelliscopejs)
library(gapminder)
# Create the plot
ggplot(gapminder, aes(year, lifeExp)) +
geom_line() +
# Facet on country and continent
facet_trelliscope(~ country + continent)
ggplot
的图作为一个单元,trelliscopejs
进行了调用。
library(ggplot2)
library(trelliscopejs)
ggplot(gapminder, aes(year, lifeExp)) +
geom_line() +
facet_trelliscope(~ country + continent,
name = "lifeExp_by_country",
desc = "Life expectancy vs. year per country",
nrow = 1, ncol = 2)
- 可以指定名字和描述。
- 初始 Grid 的排列。
library(trelliscopejs)
library(ggplot2)
library(gapminder)
# Create the plot
ggplot(gapminder, aes(year, lifeExp)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
facet_trelliscope(~ country + continent,
name = "lifeExp_by_country",
desc = "Life expectancy vs. year for 142 countries.",
nrow = 2, ncol = 3,
# Set the scales
scales = "sliced",
# Specify automatic cognostics
auto_cog = TRUE)
- 增加
scales = "sliced"
和auto_cog = TRUE
,但是具体作用还不是很明确。 - 并且中间加
geom_smooth
的话,还可以根据lm
的metric,来筛选。
library(ggplot2)
library(dplyr)
library(gapminder)
library(trelliscopejs)
# Group by country and create the two new variables
gap <- gapminder %>%
group_by(country) %>%
mutate(
delta_lifeExp = tail(lifeExp, 1) - head(lifeExp, 1),
ihme_link = paste0("http://www.healthdata.org/", country))
# Add the description
gap$delta_lifeExp <- cog(gap$delta_lifeExp, desc = "Overall change in life expectancy")
# Specify the default label
gap$ihme_link <- cog(gap$ihme_link, default_label = TRUE)
ggplot(gap, aes(year, lifeExp)) +
geom_point() +
facet_trelliscope(~ country + continent,
name = "lifeExp_by_country",
desc = "Life expectancy vs. year for 142 countries.",
nrow = 2, ncol = 3,
scales = c("same", "sliced"))
- 产生的报错
Error in deparse_vector(x) : x must be a character vector.
,在Github上,作者已经回复了在最新版本上已解决,因此建议大家安装Github上的最新版本。
2 更多学习
可以参考 Hafen (2017) 的官方Tutorial。
附录
2.1 部署到博客
Hafen (2016) 的这篇博客上已经显示了trelliscopejs
可以正常在博客中运行。
并且 Hafen (2016) 提到,
Easy to embed and share
I haven’t mentioned yet that trelliscopejs is an htmlwidget, producing pure HTML / JavaScript applications, meaning you can easily embed your displays in RMarkdown Notebooks or documents, and can share the generated HTML file with others or post on the web through a simple web server or Github pages. For example, the displays you saw in this post are hosted on Github pages.
- 指定导出文档路径 (Hafen 2018a)
- 将导出文件复制到
static
路径中,之后具体参考 发布其他.Rmd文档
2.2 x轴不能用时间变量
#> Error in names(cog_desc) <- paste0(non_unique_col, "_", names(cog_desc)): 'names' attribute [1] must be the same length as the vector [0]
报错。 相同的问题在Github上发生我,我给了临时解决方案。
t = as.numeric(t)
参考
Hafen, Ryan. 2016. “Introducing Trelliscopejs.” 2016. http://ryanhafen.com/blog/trelliscopejs.
———. 2017. Trelliscopejs. https://hafen.github.io/trelliscopejs/index.html.
———. 2018a. “Trelliscopejs Doesn’t Work with Blogdown.” Github. 2018. https://github.com/hafen/trelliscopejs/issues/67.
———. 2018b. Visualizing Big Data with Trelliscope. DataCamp. https://www.datacamp.com/courses/visualizing-big-data-with-trelliscope.