英文:
Add gt table and ggplot images to email
问题
I'm trying to add a combination of a gt table and a number of ggplot images to an email for sending to my team.
我正在尝试将一个gt表格和一些ggplot图像组合到一封邮件中,以便发送给我的团队。
It's my understanding that to include a gt table in an email it needs to be converted to html using as_raw_html()
我理解要在邮件中包含一个gt表格,需要使用as_raw_html()将其转换为HTML格式。
When I do this I can add the table to the email body but the column headers get all messed up. When I exclude the as_raw_html I only get the contents of the table and no structure.
当我这样做时,我可以将表格添加到邮件正文中,但列标题会混乱。当我不使用as_raw_html时,我只能获得表格的内容而没有结构。
Here's a reprex to show what I'm seeing. Any pointers on how I can get the table and images into the body would be greatly appreciated.
这里有一个reprex来展示我看到的情况。如果有关如何将表格和图像放入正文的任何提示,将不胜感激。
library(purrr)
library(ggplot2)
library(gt)
library(glue)
library(blastula)
library(dplyr)
generate_plots <- function(species) {
subset_data <- iris %>%
filter(Species == species)
bar_plot <- ggplot(subset_data, aes(x = Sepal.Length)) +
geom_bar(stat = "count") +
theme_minimal()
scatter_plot <- ggplot(subset_data, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point() +
theme_minimal()
box_plot <- ggplot(subset_data, aes(y = Sepal.Length)) +
geom_boxplot() +
theme_minimal()
combined_charts <- cowplot::plot_grid(bar_plot, scatter_plot, box_plot, axis = "l", ncol = 1, align = "v", rel_heights = c(5,5,5))
blastula::add_ggplot(plot_object = combined_charts, width = 7, height = 10)
}
plots <- map(unique(iris$Species), generate_plots)
CREATE GT TABLE
summary_table <- gt(iris) %>%
as_raw_html()
GENERATE THE BODY TEXT
body_text <- md(glue("
Team,
Check these out....
"))
ADD THE GT TABLE TO THE EMAIL
body_text <- md(glue("{body_text}\n\n{summary_table}"))
COMBINE ALL THE PLOTS IN THE BODY TEXT
for (p in plots) {
body_text <- md(glue("{body_text}\n\n{p}"))
}
SIGN OFF THE EMAIL
body_text <- md(glue("{body_text}\n\nThanks,\n\nMyName"))
COMPOSE THE EMAIL MESSAGE
formatted_email <- compose_email(body = body_text)
formatted_email
Adding the gt package owner in the hope of getting a reply, @Rich Iannone
希望能够得到回复,我将gt包的所有者Rich Iannone加入进来。
英文:
I'm trying to add a combination of a gt table and a number of ggplot images to an email for sending to my team.
It's my understanding that to include a gt table in an email it needs to be converted to html using as_raw_html()
When I do this I can add the table to the email body but the column headers get all messed up. When I exclude the as_raw_html I only get the contents of the table and no structure.
Here's a reprex to show what I'm seeing. Any pointers on how I can get the table and images into the body would be greatly appreciated.
library(purrr)
library(ggplot2)
library(gt)
library(glue)
library(blastula)
library(dplyr)
generate_plots <- function(species) {
subset_data <- iris %>%
filter(Species == species)
bar_plot <- ggplot(subset_data, aes(x = Sepal.Length)) +
geom_bar(stat = "count") +
theme_minimal()
scatter_plot <- ggplot(subset_data, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point() +
theme_minimal()
box_plot <- ggplot(subset_data, aes(y = Sepal.Length)) +
geom_boxplot() +
theme_minimal()
combined_charts <- cowplot::plot_grid(bar_plot, scatter_plot, box_plot, axis = "l", ncol = 1, align = "v", rel_heights = c(5,5,5))
blastula::add_ggplot(plot_object = combined_charts, width = 7, height = 10)
}
plots <- map(unique(iris$Species), generate_plots)
# CREATE GT TABLE
summary_table <- gt(iris) %>%
as_raw_html()
# GENERATE THE BODY TEXT
body_text <- md(glue("
Team,
Check these out....
"))
# ADD THE GT TABLE TO THE EMAIL
body_text <- md(glue("{body_text}\n\n{summary_table}"))
# COMBINE ALL THE PLOTS IN THE BODY TEXT
for (p in plots) {
body_text <- md(glue("{body_text}\n\n{p}"))
}
# SIGN OFF THE EMAIL
body_text <- md(glue("{body_text}\n\nThanks,\n\nMyName"))
# COMPOSE THE EMAIL MESSAGE
formatted_email <- compose_email(body = body_text)
formatted_email
Adding the gt package owner in the hope of getting a reply, @Rich Iannone
答案1
得分: 0
似乎仅将gt()函数应用于鸢尾花数据集是不够的,需要设置特定的参数。我找到了这个来自鸢尾花数据包创建者的存储库,它解决了我的问题。
https://github.com/rstudio/gt/blob/master/tests/gt-examples/01-html-script/html-01-iris.R
最终的解决方案如下:
library(purrr)
library(ggplot2)
library(gt)
library(glue)
library(blastula)
library(dplyr)
generate_plots <- function(species) {
subset_data <- iris %>%
filter(Species == species)
bar_plot <- ggplot(subset_data, aes(x = Sepal.Length)) +
geom_bar(stat = "count") +
theme_minimal()
scatter_plot <- ggplot(subset_data, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point() +
theme_minimal()
box_plot <- ggplot(subset_data, aes(y = Sepal.Length)) +
geom_boxplot() +
theme_minimal()
combined_charts <- cowplot::plot_grid(bar_plot, scatter_plot, box_plot, axis = "l", ncol = 1, align = "v", rel_heights = c(5,5,5))
blastula::add_ggplot(plot_object = combined_charts, width = 7, height = 10)
}
plots <- map(unique(iris$Species), generate_plots)
# 创建 GT 表格
summary_table <- gt(iris) %>%
tab_spanner_delim(delim = ".") %>%
cols_move_to_start(columns = Species) %>%
fmt_number(
columns = c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width),
decimals = 1
) %>%
tab_header(
title = md("The **iris** dataset"),
subtitle = md("[All about *Iris setosa*, *versicolor*, and *virginica*]")
) %>%
tab_source_note(
source_note = md("The data were collected by *Anderson* (1935).")
) %>%
as_raw_html()
# 生成正文文本
body_text <- glue("
Team,
Check these out....
")
# 将 GT 表格添加到电子邮件
body_text <- glue("{body_text}\n\n{summary_table}")
# 将所有图表组合到正文文本中
for (p in plots) {
body_text <- glue("{body_text}\n\n{p}")
}
# 结束电子邮件
body_text <- glue("{body_text}\n\nThanks,\n\nMyName")
# 组成电子邮件消息
formatted_email <- compose_email(body = md(body_text))
formatted_email
英文:
It appears as though applying the gt() function to the iris dataset is not enough, specific arguments need to be set. I came across this repo from the package creator for the iris data and it solves my problem
https://github.com/rstudio/gt/blob/master/tests/gt-examples/01-html-script/html-01-iris.R
The final solution looks as follows:
library(purrr)
library(ggplot2)
library(gt)
library(glue)
library(blastula)
library(dplyr)
generate_plots <- function(species) {
subset_data <- iris %>%
filter(Species == species)
bar_plot <- ggplot(subset_data, aes(x = Sepal.Length)) +
geom_bar(stat = "count") +
theme_minimal()
scatter_plot <- ggplot(subset_data, aes(x = Sepal.Length, y = Sepal.Width)) +
geom_point() +
theme_minimal()
box_plot <- ggplot(subset_data, aes(y = Sepal.Length)) +
geom_boxplot() +
theme_minimal()
combined_charts <- cowplot::plot_grid(bar_plot, scatter_plot, box_plot, axis = "l", ncol = 1, align = "v", rel_heights = c(5,5,5))
blastula::add_ggplot(plot_object = combined_charts, width = 7, height = 10)
}
plots <- map(unique(iris$Species), generate_plots)
# CREATE GT TABLE
summary_table <- gt(iris) %>%
tab_spanner_delim(delim = ".") %>%
cols_move_to_start(columns = Species) %>%
fmt_number(
columns = c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width),
decimals = 1
) %>%
tab_header(
title = md("The **iris** dataset"),
subtitle = md("[All about *Iris setosa*, *versicolor*, and *virginica*]")
) %>%
tab_source_note(
source_note = md("The data were collected by *Anderson* (1935).")
) %>%
as_raw_html()
# GENERATE THE BODY TEXT
body_text <- glue("
Team,
Check these out....
")
# ADD THE GT TABLE TO THE EMAIL
body_text <- glue("{body_text}\n\n{summary_table}")
# COMBINE ALL THE PLOTS IN THE BODY TEXT
for (p in plots) {
body_text <- glue("{body_text}\n\n{p}")
}
# SIGN OFF THE EMAIL
body_text <- glue("{body_text}\n\nThanks,\n\nMyName")
# COMPOSE THE EMAIL MESSAGE
formatted_email <- compose_email(body = md(body_text))
formatted_email
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论