我正在使用ggsurvplot()使用两个变量(组和突变)进行生存分析。我正在尝试创建一条具有4条曲线的生存图,在其中我要使用颜色区分组:A和B en线型以区分突变:野生型和删除。总而言之,我分为以下4组:
group = A,突变=野生型(蓝色,纯色),
组= A,突变=已删除(蓝色,虚线),
组= B,突变=野生型(黄色,纯色),
组= B,突变=已删除(黄色,虚线)。
ggsurvplot()的帮助页面显示以下内容:“如果n.strata> 1,则期望值是分组变量名称。默认情况下,生存曲线由层使用参数color =“ strata”进行着色,但是您还可以通过其他任何用于拟合生存曲线的分组变量来为生存曲线着色。在这种情况下,可以通过使用参数调色板指定自定义调色板。”因此,我认为应该可以使用group变量定义颜色,使用突变定义线型。
我尝试了以下代码:
sfit.efs <- survfit(Surv(as.numeric(TIME_FIRSTEVENT), EVENT) ~ group + mutation + input.efs)
gg.efs <- ggsurvplot(sfit.efs, data = input.efs,
legend.labs = c("A; wildtype", "A; deleted", "B; wildtype"; "B, deleted"),
color = "group", linetype = "mutation", palette = c("#2E9FDF", "#E7B800"),
risk.table = T, cumevents = T)
这将导致以下警告:
警告信息: 现在,要更改调色板,请使用参数Palette ='group'代替color ='group'
忽略此警告并尝试绘制生存图,将导致以下错误:
grDevices :: col2rgb(colour,TRUE)中的错误: 颜色名称“ group”无效
我尝试了另外两个选项:
1)告诉R不要绘制风险表和cumevents表。
gg.efs <- ggsurvplot(sfit.efs, data = input.efs, legend.labs = c("A; wildtype",
"A; deleted", "B; wildtype"; "B, deleted"), palette = c("#2E9FDF", "#2E9FDF",
"#E7B800", "#E7B800"), linetype = c("solid", "dashed", "solid", "dashed"),
risk.table = F, cumevents = F)
2)告诉R使用分层作为颜色和线型,然后在图中分别强制使用颜色和线型。
gg.efs <- ggsurvplot(sfit.efs, data = input.efs, legend.labs = c("A; wildtype",
"A; deleted", "B; wildtype"; "B, deleted"), color = "strata", linetype =
"strata", risk.table = TRUE, risk.table.col = "strata", cumevents = TRUE,
cumevents.col = "strata", tables.y.text = FALSE)
lines <- c("solid", "dashed", "solid", "dashed")
names(lines) <- c("A; wildtype", "A; deleted", "B; wildtype"; "B, deleted")
cols <- c("#2E9FDF", "#2E9FDF", "#E7B800", "#E7B800")
names(cols) <- c("A; wildtype", "A; deleted", "B; wildtype"; "B, deleted")
gg.efs$plot <- gg.efs$plot + scale_linetype_manual(values = lines) +
scale_colour_manual(values = cols)
gg.efs$table <- gg.efs$table + scale_color_manual(values = c("black", "black",
"black", "black")) + theme(axis.text.y = element_text(color = cols[4:1]),
axis.ticks.y = element_blank(), axis.title.x = element_blank(), axis.title.y =
element_blank(), legend.position = "none")
选项1)有效!但是,通过这样做,您可以从情节中排除风险表,而我真的更希望也包括风险表。
在选项2)中,我将风险表中的y轴图例修改为正确的颜色。因此,这在某种程度上也是可行的。但是,我不能将风险表的y轴上的虚线用作图例。我可以使用文本,但是在这里我将名称更改为A,B,通配符并删除(因为实际数据受到保护),而在现实生活中,这些名称相当长。这就是为什么我更喜欢使用行而不是文本的原因。尤其是因为我想在一页上绘制多个图和风险表。
我真的很想找到一个解决方案,因为我正在创建许多生存图,并且我真的想在每个图中对相同的组使用相同的颜色,以使其更易于阅读。
有人知道解决方案吗?
编辑:
我确实找到了以下问题:different color type and line type for multiple groups in survival curve
但是, 1)从该问题的答案中运行建议的代码不起作用。 R告诉我没有名为“ patchwork”的软件包:
devtools::install_github("thomasp85/patchwork")
library(patchwork)
gg.efs$plot / gg.efs$table + plot_layout(ncol = 1, heights = c(3, 1)) +
theme(axis.text.y = element_text(color = rev(cols)))
2)该问题的答案不包括更改风险表Y轴上图例的线型的选项。我真的更喜欢避免在风险表中使用文字作为图例。