【问题标题】:Does officer-package accept ggsurvplot-object?官员包是否接受 ggsurvplot-object?
【发布时间】:2021-04-28 08:10:45
【问题描述】:

我正在尝试使用官员包将 ggsurvplot-object 导出到 powerpoint,但没有成功。我能够找到很多关于如何使用现在已经过时的 ReporterS-package 的说明,并提到该官员也应该工作。文档中似乎没有提到这一点。那么这应该工作吗?是否可以使用这些工具将矢量化生存图绘制到 pptx-slide 中?

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) 也不起作用。我做错了什么?

编辑:感谢以下所有 cmets!另一个更新。数据没有任何问题。经过一点调试,我的原始数据产生了预期的结果。

还有一个问题。包似乎无法在同一张幻灯片中添加风险表和生存曲线。是的,您可以通过在单独的幻灯片上制作两个单独的图来传递这一点,但我认为这不是一个好习惯。

如果我没有完全弄错的话,官员和记者有一些共同的代码,这个问题也存在。 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")

编辑 n:o 2:以及有关所需结果的提示。

【问题讨论】:

  • 不能导出为pdf并导入pptx作为矢量吗?
  • 是的。我可以逐步做到这一点,而且效果很好。保存到 .eps 也可以。但是,为了工作流程,我非常感谢让 R 完成这项工作并创建包含所有必要信息的现成 pptx 的可能性。

标签: r survival officer rvg


【解决方案1】:

当然可以导出ggsurvplots。通过officer 到 pptx。您的代码有两个问题。首先,您必须使用 rvg::dml(ggobj = ...) 。第二个你设置layout = "Overall survival"。但是officer 附带的默认 pptx 中没有具有此名称的布局,即您只能使用 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")

【讨论】:

  • 太好了,谢谢!所以它有效,而且很容易重现。我做了两个修改。但是我的原始图表仍然无法打印。它给出了这个警告:“read_xml.raw(charToRaw(enc2utf8(x)), "UTF-8", ..., as_html = as_html, : StartTag: invalid element name [68]" 中的错误与任何ggsurvplot 中的参数。从使用的向量中删除标签也不起作用。有什么想法吗?
  • 嗨劳里。你改成rvg::dml(ggobj = ...了吗??我之所以问,是因为当我使用 rvg::dml(code = ... 时,我收到的错误消息与您完全相同。
  • 再次感谢,一个愚蠢的错误!现在我可以用你刚刚给出的完全相同的代码来绘制一个情节。不过我还是有问题。现在,当我使用参数“last_plot()”时,它只生成风险表。如果我尝试通过将 ggsurvplot 放到一个对象上而不是“last_plot()”来解决这个问题,R 会话将完全崩溃而没有回溯。如果我先打印绘图然后使用 last_plot(),也会发生同样的情况。由于数据最初是从 SPSS 文件导入并在 R 中操作的,我猜数据类型可能存在一些问题?
  • 好的,简短的更新。崩溃的原因又是愚蠢的。我打开了 Powerpoint 和要写入的文件。所以说官员有bug,但是很容易被绕过。现在我可以得到 pptx 的风险表,但不能得到生存曲线。我会尝试一下,看看是否确实是原始数据集中的数据类型导致了问题。
  • 只是一个简短的评论。我编辑了原始帖子并将希望的最后一期放在那里。代码现在运行良好,数据不是问题,但在同一张幻灯片上获取风险表和生存曲线似乎是问题。希望您或其他人知道解决此问题的方法。
【解决方案2】:

令我惊讶的是,如果您将生存情节嵌入print() 语句中,则可以在dml() 中使用code = 参数。请务必包含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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2018-03-19
    • 2023-03-25
    相关资源
    最近更新 更多