table 内的 ggplot 图
ggplot plots within a table
问题
我想制作一个好看的 table,它在一列的单元格中有 ggplots。一个关键因素是我想最终创建此 table 的 pdf 输出。
到目前为止我尝试了什么
希望下面的例子是可以理解的。基本上我发现我可以使用 gt 包实现我想要的。问题是这会创建一个 html 小部件,然后您必须使用 phantomJS 和 webshot 将其导出为 pdf。
library(dplyr)
library(purrr)
library(gt)
library(ggplot2)
dat = tibble(
RowLabel = letters[1:5],
Numeric = seq(100,500,100)
) %>%
mutate(
plotData = RowLabel %>% map(function(pos){
tibble(y=runif(10)*100) %>%
arrange(desc(y)) %>%
mutate(x=row_number())
}),
plot_obj = plotData %>% map(function(df){
df %>%
ggplot(aes(x=x,y=y))+
geom_col()
}),
plot_grob = plot_obj %>% map(cowplot::as_grob)
)
tab = dat %>%
select(RowLabel, Numeric) %>%
mutate(
ggplot = NA
) %>%
gt() %>%
text_transform(
locations = cells_body(vars(ggplot)),
fn = function(x) {
dat$plot_obj %>%
map(ggplot_image, height = px(50))
}
)
tab
我想要什么
我想要一个类似于上例的输出。但是,我想要一个不需要我使用 html 小部件并且可以直接保存为 pdf 而无需使用其他程序的解决方案。使用 ggplot 可以做到这一点吗?我已经开始了解更多关于 grids/grobs/gtables 等的知识,但没有取得任何有意义的进展。
提前致谢!
也许您可以调整 gtsave()
功能以适应?例如
library(dplyr)
library(purrr)
library(gt)
library(ggplot2)
dat = tibble(
RowLabel = letters[1:5],
Numeric = seq(100,500,100)
) %>%
mutate(
plotData = RowLabel %>% map(function(pos){
tibble(y=runif(10)*100) %>%
arrange(desc(y)) %>%
mutate(x=row_number())
}),
plot_obj = plotData %>% map(function(df){
df %>%
ggplot(aes(x=x,y=y))+
geom_col()
}),
plot_grob = plot_obj %>% map(cowplot::as_grob)
)
tab = dat %>%
select(RowLabel, Numeric) %>%
mutate(
ggplot = NA
) %>%
gt() %>%
text_transform(
locations = cells_body(vars(ggplot)),
fn = function(x) {
dat$plot_obj %>%
map(ggplot_image, height = px(50))
}
)
tab %>%
gt::gtsave(filename = "test.pdf", vwidth = 180, vheight = 250)
(R v4.0.3 / gt v0.2.2)
问题
我想制作一个好看的 table,它在一列的单元格中有 ggplots。一个关键因素是我想最终创建此 table 的 pdf 输出。
到目前为止我尝试了什么
希望下面的例子是可以理解的。基本上我发现我可以使用 gt 包实现我想要的。问题是这会创建一个 html 小部件,然后您必须使用 phantomJS 和 webshot 将其导出为 pdf。
library(dplyr)
library(purrr)
library(gt)
library(ggplot2)
dat = tibble(
RowLabel = letters[1:5],
Numeric = seq(100,500,100)
) %>%
mutate(
plotData = RowLabel %>% map(function(pos){
tibble(y=runif(10)*100) %>%
arrange(desc(y)) %>%
mutate(x=row_number())
}),
plot_obj = plotData %>% map(function(df){
df %>%
ggplot(aes(x=x,y=y))+
geom_col()
}),
plot_grob = plot_obj %>% map(cowplot::as_grob)
)
tab = dat %>%
select(RowLabel, Numeric) %>%
mutate(
ggplot = NA
) %>%
gt() %>%
text_transform(
locations = cells_body(vars(ggplot)),
fn = function(x) {
dat$plot_obj %>%
map(ggplot_image, height = px(50))
}
)
tab
我想要什么
我想要一个类似于上例的输出。但是,我想要一个不需要我使用 html 小部件并且可以直接保存为 pdf 而无需使用其他程序的解决方案。使用 ggplot 可以做到这一点吗?我已经开始了解更多关于 grids/grobs/gtables 等的知识,但没有取得任何有意义的进展。
提前致谢!
也许您可以调整 gtsave()
功能以适应?例如
library(dplyr)
library(purrr)
library(gt)
library(ggplot2)
dat = tibble(
RowLabel = letters[1:5],
Numeric = seq(100,500,100)
) %>%
mutate(
plotData = RowLabel %>% map(function(pos){
tibble(y=runif(10)*100) %>%
arrange(desc(y)) %>%
mutate(x=row_number())
}),
plot_obj = plotData %>% map(function(df){
df %>%
ggplot(aes(x=x,y=y))+
geom_col()
}),
plot_grob = plot_obj %>% map(cowplot::as_grob)
)
tab = dat %>%
select(RowLabel, Numeric) %>%
mutate(
ggplot = NA
) %>%
gt() %>%
text_transform(
locations = cells_body(vars(ggplot)),
fn = function(x) {
dat$plot_obj %>%
map(ggplot_image, height = px(50))
}
)
tab %>%
gt::gtsave(filename = "test.pdf", vwidth = 180, vheight = 250)
(R v4.0.3 / gt v0.2.2)