Принимает ли офицерский пакет объект ggsurvplot?

Я безуспешно пытаюсь экспортировать объект ggsurvplot в PowerPoint с помощью пакета Officer. Мне удалось найти много инструкций о том, как использовать для этого теперь уже полный ReporterS-пакет, и несколько упоминаний о том, что офицер тоже должен работать. Кажется, в документации нет ничего, что упоминает об этом. Так должно ли это вообще работать? Можно ли с помощью этих инструментов получить векторизованный график выживания на pptx-слайде?

      totsur <- ggsurvplot(yhd1,
           data = sappivertailu,
           combine=TRUE,
           xlab = "Time, months", 
           ylab="Survival", 
           title="Overall survival",
           lwd=2,
           palette="jco",
           xscale = "d_m",
           xlim = c(0,730.5),
           break.x.by = 91.3,
           risk.table = TRUE,
           pval = TRUE,
           fontsize = 3)
totsur
my_vec_graph <- dml(code = totsur)

doc <- read_pptx()
doc <- add_slide(doc, layout = "Overall survival", master = "Office Theme")
doc <- ph_with(doc, my_vec_graph, location = ph_location_fullsize() )
print(doc, target = "Sappitutkimus/Charts/survi1.pptx")

Изменение dml(ggobj = totsur)ни то, ни другое не работает. Что я делаю неправильно?

Изменить: Спасибо за все комментарии ниже! И еще одно обновление. С данными все было в порядке. После небольшой отладки мои исходные данные дали желаемый результат.

Остается одна проблема. Кажется, что пакет не может добавить таблицу рисков и кривую выживаемости на одном слайде. Да, вы можете пройти это, сделав два отдельных графика на разных слайдах, но я не думаю, что это хорошая практика.

Если я не ошибаюсь, у офицера и репортеров есть общий код, и эта проблема тоже присутствовала. https://github.com/kassambara/survminer/issues/314

Кто-нибудь знает способ обойти это? Вот немного более компактный кусок, который я сейчас использую. В противном случае это работает нормально.

      yhd1 <- survfit(Surv(sappivertailu$Survi, sappivertailu$Kuolema) ~ Arm, data=koe)

totsur <- 
  ggsurvplot(yhd1,
           combine = TRUE,
           data = sappivertailu,
      #     risk.table = TRUE,
           pval = TRUE,
           fontsize = 3
           )
totsur
my_vec_graph <- rvg::dml(ggobj = last_plot())

doc <- read_pptx()
doc <- add_slide(doc, layout = "Title and Content", master = "Office Theme")
doc <- ph_with(doc, my_vec_graph, location = ph_location_fullsize() )
print(doc, target = "Sappitutkimus/Charts/survi1.pptx")

Редактировать:o 2: И подсказка о желаемом результате.

2 ответа

Конечно, вы могли бы экспортировать s. в pptx через . Есть две проблемы с вашим кодом. Сначала вы должны использовать rvg::dml(ggobj = ...). Во-вторых, вы установили layout = "Overall survival". Но макета с таким именем нет в стандартном pptx, поставляемом с officer, то есть вы можете использовать только те макеты, которые присутствуют в шаблоне pptx. Исправление обеих проблем и использование базового примера из документации ggsurvplot:

      require("survival")
#> Loading required package: survival
library(survminer)
#> Loading required package: ggplot2
#> Loading required package: ggpubr
library(officer)

fit<- survfit(Surv(time, status) ~ sex, data = lung)

# Basic survival curves
ggsurvplot(fit, data = lung)


my_vec_graph <- rvg::dml(ggobj = last_plot())

doc <- read_pptx()
doc <- add_slide(doc, layout = "Title and Content", master = "Office Theme")
doc <- ph_with(doc, my_vec_graph, location = ph_location_fullsize() )
print(doc, target = "survi2.pptx")

РЕДАКТИРОВАТЬ Если вы хотите иметь несколько содержимого на одном слайде, вы можете изменить макет на Two Contentи использовать ph_location_left/right:

      doc <- read_pptx()
doc <- add_slide(doc, layout = "Two Content", master = "Office Theme")
doc <- ph_with(doc, my_vec_graph, location = ph_location_left() )
doc <- ph_with(doc, my_vec_graph, location = ph_location_right() )
print(doc, target = "survi2.pptx")

К моему удивлению, вы можете использовать code =аргумент внутри dml()если вы встроите свой сюжет выживания в print()утверждение. Обязательно включите newpage = FALSE:

      require("survival")
# Loading required package: survival
library(survminer)
#> Loading required package: ggplot2
#> Loading required package: ggpubr
library(officer)

fit<- survfit(Surv(time, status) ~ sex, data = lung)

# Basic survival curves
p = ggsurvplot(fit, data = lung, risk.table = TRUE)
    
my_vec_graph <- rvg::dml(code = print(p, newpage = FALSE))

doc <- read_pptx()
doc <- add_slide(doc, layout = "Title and Content", master = "Office Theme")
doc <- ph_with(doc, my_vec_graph, location = ph_location_fullsize() )
print(doc, target = "survi2.pptx")
Другие вопросы по тегам