简体   繁体   中英

Does officer-package accept ggsurvplot-object?

I'm trying to export a ggsurvplot-object to powerpoint with officer-package with no success. I was able to find a lot of instructions on how to use now obsolute ReporterS-package for this and a few mentions that officer should work as well. There seems to be nothing in the documentation mentioning this. So should this work at all? Is it possible to get a vectorized survival plot to a pptx-slide with these tools?

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")

Changing the dml(ggobj = totsur) neither works. What am I doing wrong?

Edit: Thanks for all the comments below. And another update. There was nothing wrong with the data, After a little debugging. my original data produces the intended result.

One problem remains. Package does not seem to able to add risk table and survival curve in the same slide. Yes, you can pass this by making two separate plots on separate slides but I don't think that's good practice.

If I'm not totally mistaken, officer and ReporteRs have some code in common and this issue was present there as well. https://github.com/kassambara/survminer/issues/314

Does anyone know a way around this? Here's a bit more compact chunk I'm currently using. This works fine otherwise.

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")

Edit n:o 2: And a tip about the desired result. 包括风险表中的数字

Sure could you export ggsurvplot s. to pptx via officer . There are two issues with your code. First you have to make use of rvg::dml(ggobj =...) . Second you set layout = "Overall survival" . But there is no layout with this name in the default pptx shipped with officer , ie you could only use layouts which are present in the pptx template. Fixing both issues and making use of the basic example from the docs of 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")

在此处输入图像描述

EDIT If you want to have multiple contents on the same slide you could change the layout to Two Content and make use of 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")

Somewhat to my amazement, you can use the code = argument within dml() if you embed your suvival plot in a print() statement. Be sure to include 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")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM