1

我之前曾尝试寻求帮助,但实际上并没有解决我的问题。更多信息可以在这里找到:(你可以在这里找到数据集)https://stackoverflow.com/questions/51442502/survival-analysis-combining-survfit-and-ggplot-objects

不幸的是,我无法提供一个可靠的示例来发布,因为我的代码很大程度上基于外部程序。我很肯定,尽管无论如何我的问题都可以得到回答。

我达到了创建 2 个 ggplot2 对象的地步,这些对象需要组合成一个图形,一个重叠在另一个上面。

即,一个 km.plot 属于:

类(km.plot$plot)
1 “gg”“ggplot”

和两个:

类(surv.plot)
1 “gg”“ggplot”

两者共享相同的属性

km.plot$地块 在此处输入图像描述

生存图 在此处输入图像描述

我的问题是如何将结果图合并到一个图中?也就是说,让 surv.plot 和 km.plot$plot 相互重叠。

按照另一个用户的建议执行以下操作会导致错误:

 km.plot$plot + surv.plot$layers[[1]]
 Error in FUN(X[[i]], ...) : object 'label' not found

我认为这个错误与以下几行有关

 > surv.plot$layers
 [[1]]
 mapping: y = ~mean, group = ~label, colour = ~label 
 geom_line: na.rm = FALSE
 stat_identity: na.rm = FALSE
 position_identity 

 ggplot(data, aes(x=t)) +
 geom_line(aes(y= mean, group= label, colour= label), size=1.5) +

但我还补充说,inherit.aes = FALSE 但没有解决我的问题。

我还检查了:

> head(surv.plot)
$`data`
curve           t      mean        lci       uci label
1    weibull  0.00000000 1.0000000 1.00000000 1.0000000  Cabo
2    weibull  0.05514645 0.9995771 0.99816278 0.9999721  Cabo
3    weibull  0.11029289 0.9990793 0.99646259 0.9999098  Cabo
4    weibull  0.16543934 0.9985407 0.99479769 0.9998211  Cabo
5    weibull  0.22058579 0.9979715 0.99316001 0.9997176  Cabo



 > head(km.plot)
 $`plot`

 $`data.survplot`
 time n.risk n.event n.censor      surv    std.err     upper     lower
 1   0.4271047     79       0        1 1.0000000 0.00000000 1.0000000 1.0000000
 2   1.0841889     78       1        0 0.9871795 0.01290349 1.0000000 0.9625264
 3   1.3470226     77       1        0 0.9743590 0.01836796 1.0000000 0.9399054
 4   3.9753593     76       1        0 0.9615385 0.02264554 1.0000000 0.9197944
 5   4.0082136     75       1        0 0.9487179 0.02632491 0.9989527 0.9010094

我很困惑。我几乎可以肯定这是可以做到的,因为这两个对象在结构上基本相同,所以我看不出为什么不能这样做。但是我花了很长时间没有希望。我真的希望有人可以指导我!

感谢您花时间阅读这篇文章

4

1 回答 1

2

发生这种情况是因为该surv.plot层包含一个名为的变量的映射,该变量label未包含在km.plot. 您应该能够通过将surv.plot数据作为参数添加到geom而不是ggplot()在创建时来解决此问题surv.plot。这样,绘制图层所需的数据将与它一起“旅行”。

我们可以用更简单的数据来说明这一点。让我们首先从只有几列的数据创建一个图:

library(tidyverse)

df1 <- mtcars %>% 
  select(mpg, wt)

# This represents `km.plot`
(p <- ggplot(df1, aes(wt, mpg)) + geom_point())

现在我们可以尝试添加一个依赖于未包含在上图中的列的层df1

df2 <- mtcars %>% 
  select(mpg, wt, cyl)

q1 <- ggplot(df2, aes(wt, mpg)) +
  geom_smooth(aes(color = factor(cyl)), method = "lm")

p + q1$layers[[1]]
#> Error in factor(cyl): object 'cyl' not found

q2 <- ggplot() +
  geom_smooth(data = df2, aes(wt, mpg, color = factor(cyl)), method = "lm")

p + q2$layers[[1]]

reprex 包(v0.2.0.9000)于 2018 年 7 月 23 日创建。

于 2018-07-23T11:34:06.257 回答