R 生存曲线中多组的不同颜色类型和线型

R 生存曲线中多组的不同颜色类型和线型,r,ggplot2,R,Ggplot2,我正试图为两个不同的人群绘制三种不同癌症的存活图。我希望每种癌症类型都有一种颜色,不同人群之间的差异是虚线和实线。癌症A是红色的,PopA有虚线,PopB有实线,以此类推 我似乎无法为每个癌症组获得一种颜色,然后在人群之间改变线型 我无法在此发布所有数据,因为它受到保护,但这里是df、surv函数和ggsurvplot: library(tidyverse) library(survminer) library(survival) library(KMsurv) library(ggfortif

我正试图为两个不同的人群绘制三种不同癌症的存活图。我希望每种癌症类型都有一种颜色,不同人群之间的差异是虚线和实线。癌症A是红色的,PopA有虚线,PopB有实线,以此类推

我似乎无法为每个癌症组获得一种颜色,然后在人群之间改变线型

我无法在此发布所有数据,因为它受到保护,但这里是df、surv函数和ggsurvplot:

library(tidyverse)
library(survminer)
library(survival)
library(KMsurv)
library(ggfortify)
library(ggthemes)

> srv_time_mon <- sample(0:100,200, replace = TRUE)
> cancer <- sample(1:3,200, replace = TRUE)
> alive <- sample(0:1,200, replace = TRUE)
> pop <- sample(1:2,200, replace = TRUE)
> dead <- sample(0:1,200, replace = TRUE)
> df <- data.frame(srv_time_mon,cancer, alive, pop, dead)

> head(df)
  srv_time_mon cancer alive pop dead
1           84      1     0   1    1
2           91      2     0   2    0
3           44      1     0   2    1
4           57      2     1   1    0
5           54      1     1   2    0
6           31      3     0   2    1

test <- survfit(Surv(srv_time_mon, dead)~pop+cancer, data=df)

 ggsurvplot(test, data=df, conf.int = FALSE, 
       pval = "Log-Rank p <0.001", title="Kaplan-Meier Curves", break.time.by=12,
       risk.table = TRUE, 
       pval.coord=c(156,0.60), surv.median.line = "v", 
       legend.labs=c("Pop A Cancer 1", "Pop A Cancer 2", "Pop A Cancer 3", "Pop B Cancer 1",
       "Pop B Cancer 2", "Pop B Cancer 3"), 
       legend.title="", legend = c(0.8,0.83), linetype = c("pop"), palette = "jco")+ 
       scale_linetype_discrete( name="Pop Data", labels=c("A", "B"))
如果查看ggsurvplot返回的对象的类,我们称之为p,您会注意到它不是ggplot对象

您可以在这里找到ggplot对象

class(p$plot)
#[1] "gg"     "ggplot"
如果你现在跑

p$plot + scale_linetype_discrete(name = "Pop Data", labels = c("A", "B"))
您将看到以下绘图:

现在,如果需要一个图例,请将ggsurvplot调用中的linetype参数更改为strata,以便将两个图例合并,因为现在相同的变量映射到不同的外观

最后,在p$plot中添加scale_线型_手册和scale_颜色_手册

请参阅下面的完整代码

资料


我无法复制此图。在添加“缩放”线型“手动”和“缩放”颜色“手动”的步骤中,生成的printp会抛出一个错误:namescols中的错误
p$plot + scale_linetype_discrete(name = "Pop Data", labels = c("A", "B"))
p <- ggsurvplot(
  test,
  data = df,
  conf.int = FALSE,
  pval = "Log-Rank p <0.001",
  title = "Kaplan-Meier Curves",
  break.time.by = 12,
  risk.table = TRUE,
  pval.coord = c(156, 0.60),
  surv.median.line = "v",
  legend.labs = c(
    "Pop A Cancer 1",
    "Pop A Cancer 2",
    "Pop A Cancer 3",
    "Pop B Cancer 1",
    "Pop B Cancer 2",
    "Pop B Cancer 3"
  ),
  legend.title = "",
  # legend = c(0.8, 0.83), # took this out for cleaner appearance of the legend (optional)
  linetype = c("strata"), # changed from "pop" to "strata"
  palette = "jco"
)
cols <-  rep(c("red", "black"), c(2, 4))
#cols <-  rep(c("red", "forestgreen", "lightblue"), 2) # example
names(cols) <- paste("Pop", rep(c("A", "B"), each = 3), "Cancer", 1:3)

lines <-  rep(c("dashed", "solid"), each = 3)
names(lines) <- paste("Pop", rep(c("A", "B"), each = 3), "Cancer", 1:3)

p$plot <- p$plot + 
  scale_linetype_manual(values = lines) +
  scale_colour_manual(values = cols) +
  theme(legend.position = "bottom")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)
p$plot / p$table + plot_layout(ncol = 1, heights = c(3, 1)) + 
  theme(axis.text.y = element_text(color = rev(cols)))
set.seed(1)
df <- data.frame(
  srv_time_mon = sample(0:100, 200, replace = TRUE),
  cancer = sample(1:3, 200, replace = TRUE),
  alive = sample(0:1, 200, replace = TRUE),
  pop = sample(1:2, 200, replace = TRUE),
  dead = sample(0:1, 200, replace = TRUE)
)