我正在用生存包绘制生存函数。一切正常,但我怎么知道哪条曲线是哪条?如何将其添加到图例?
url <- "http://socserv.mcmaster.ca/jfox/Books/Companion/data/Rossi.txt"
Rossi <- read.table(url, header=TRUE)[,c(1:10)]
km <- survfit(Surv(week, arrest)~race, data=Rossi)
plot(km, lty=c(1 ,2))
答案 0 :(得分:2)
不幸的是,plot.survival
函数似乎没有提供标记曲线的好选项。文档说明曲线是按它们在print
中出现的顺序绘制的,因此您可以确定哪种曲线可以改变线型或颜色。但这并不适合分享。
另一种方法是使用survplot
中的rms
函数,它会对曲线进行标注。以下是您的示例和CI绘图关闭后的样子。 (请注意,survplot
不会占用survfit
个对象,因此您必须使用可以读取其结果的函数重新进行估算 - 此处为npsurv
。)
library(rms)
survplot(npsurv(Surv(week, arrest)~race, data=Rossi), conf = "none")
查看文档,了解如何调整图表的其他方面,包括用图例替换图中的标签。
答案 1 :(得分:2)
我怎么知道哪条曲线是哪条?
使用str()
,您可以查看km
中的哪些元素。
km$strata
显示有48个和10个元素。这恰好与前48个项目的下降模式和km $ surv中的最后10个项目
km$surv[1:48]
km$surv[49:58]
因此除了print()
中的订单提示之外,使用此特定数据集我们还可以确保前48个元素属于race=black
如何将其添加到图例?
与其他模型输出不同km
不容易转换为data.frame。但是,我们可以自己提取元素并创建一个data.frame,然后自己绘制它。
首先,我们创建一个涉及阶层的因素:48个黑人和10个其他
race <- as.factor(c(rep("black", 48), rep("other", 10)))
df <- data.frame(surv = km$surv, race = race, time = km$time)
接下来我们可以像往常一样绘制它(在我的例子中,使用ggplot2)。
library(ggplot2)
ggplot(data = df, aes(x = time, y = surv)) +
geom_point(aes(colour = race)) +
geom_line(aes(colour = race)) +
theme_bw()
答案 2 :(得分:1)
多亏了Richard的回答,我找到了一种使用plot.survfit
中使用的基本绘图方法将正确的名称绘制到正确的曲线的方法:
legend_values <- names(km$strata)
plot(km)
legend(
"topright",
legend=legend_values,
col=1:2,
lty = c(1,1),
horiz=FALSE,
bty='n')
我更喜欢ggplot的绘制方式,但是我希望在plot.survfit
中保留逐步显示。