Ale*_*xis 2 r ggplot2 dplyr purrr gt
我想创建一个 gt 表,在其中可以看到一些指标,例如观察次数、平均值和中位数,并且我想要一个带有直方图的列。对于这个问题,我将使用 iris 数据集。
我最近学会了如何使用以下代码将绘图放入小标题中:
library(dplyr)
library(tidyr)
library(purrr)
library(gt)
my_tibble <- iris %>%
pivot_longer(-Species,
names_to = "Vars",
values_to = "Values") %>%
group_by(Vars) %>%
summarise(obs = n(),
mean = round(mean(Values),2),
median = round(median(Values),2),
plots = list(ggplot(cur_data(), aes(Values)) + geom_histogram()))
Run Code Online (Sandbox Code Playgroud)
现在我想使用绘图列来绘制每个变量的直方图,所以我尝试了以下方法:
my_tibble %>%
mutate(ggplot = NA) %>%
gt() %>%
text_transform(
locations = cells_body(vars(ggplot)),
fn = function(x) {
map(.$plots,ggplot_image)
}
)
Run Code Online (Sandbox Code Playgroud)
但它返回给我一个错误:
Error in body[[col]][stub_df$rownum_i %in% loc$rows] <- fn(body[[col]][stub_df$rownum_i %in% :
replacement has length zero
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
在回顾了 @akrun 和 @TarJae 的优秀想法之后,我有了这个解决方案,它提供了所需的 gt 表:
plots <- iris %>%
pivot_longer(-Species,
names_to = "Vars",
values_to = "Values") %>%
group_by(Vars) %>%
nest() %>%
mutate(plot = map(data,
function(df) df %>%
ggplot(aes(Values)) +
geom_histogram())) %>%
select(-data)
iris %>%
pivot_longer(-Species,
names_to = "Vars",
values_to = "Values") %>%
group_by(Vars) %>%
summarise(obs = n(),
mean = round(mean(Values),2),
median = round(median(Values),2)) %>%
mutate(ggplot = NA) %>%
gt() %>%
text_transform(
locations = cells_body(vars(ggplot)),
fn = function(x) {
map(plots$plot, ggplot_image, height = px(100))
}
)
Run Code Online (Sandbox Code Playgroud)
我必须在输出表之外创建绘图,这样我就可以在 gt 表中调用它。