ggplot2 kullanarak hayatta kalma eğrilerini çizmek için bir çözüm arıyorum. Bazı güzel örnekler buldum, ancak tüm ggplot2 estetiklerini (özellikle gölgeli güven aralıkları vb.) Izlemiyorlar. Sonunda ben kendi işlevini yazdık: ggplot2 ile R'de hayatta kalma eğrilerini çizme
ggsurvplot<-function(s, conf.int=T, events=T, shape="|", xlab="Time",
ylab="Survival probability", zeroy=F, col=T, linetype=F){
#s: a survfit object.
#conf.int: TRUE or FALSE to plot confidence intervals.
#events: TRUE or FALSE to draw points when censoring events occur
#shape: the shape of these points
#zeroy: Force the y axis to reach 0
#col: TRUE, FALSE or a vector with colours. Colour or B/W
#linetype: TRUE, FALSE or a vector with line types.
require(ggplot2)
require(survival)
if(class(s)!="survfit") stop("Survfit object required")
#Build a data frame with all the data
sdata<-data.frame(time=s$time, surv=s$surv, lower=s$lower, upper=s$upper)
sdata$strata<-rep(names(s$strata), s$strata)
#Create a blank canvas
kmplot<-ggplot(sdata, aes(x=time, y=surv))+
geom_blank()+
xlab(xlab)+
ylab(ylab)+
theme_bw()
#Set color palette
if(is.logical(col)) ifelse(col,
kmplot<-kmplot+scale_colour_brewer(type="qual", palette=6)+scale_fill_brewer(type="qual", palette=6),
kmplot<-kmplot+scale_colour_manual(values=rep("black",length(s$strata)))+scale_fill_manual(values=rep("black",length(s$strata)))
)
else kmplot<-kmplot+scale_fill_manual(values=col)+scale_colour_manual(values=col)
#Set line types
if(is.logical(linetype)) ifelse(linetype,
kmplot<-kmplot+scale_linetype_manual(values=1:length(s$strata)),
kmplot<-kmplot+scale_linetype_manual(values=rep(1, length(s$strata)))
)
else kmplot<-kmplot+scale_linetype_manual(values=linetype)
#Force y axis to zero
if(zeroy) {
kmplot<-kmplot+ylim(0,1)
}
#Confidence intervals
if(conf.int) {
#Create a data frame with stepped lines
n <- nrow(sdata)
ys <- rep(1:n, each = 2)[-2*n] #duplicate row numbers and remove the last one
xs <- c(1, rep(2:n, each=2)) #first row 1, and then duplicate row numbers
scurve.step<-data.frame(time=sdata$time[xs], lower=sdata$lower[ys], upper=sdata$upper[ys], surv=sdata$surv[ys], strata=sdata$strata[ys])
kmplot<-kmplot+
geom_ribbon(data=scurve.step, aes(x=time,ymin=lower, ymax=upper, fill=strata), alpha=0.2)
}
#Events
if(events) {
kmplot<-kmplot+
geom_point(aes(x=time, y=surv, col=strata), shape=shape)
}
#Survival stepped line
kmplot<-kmplot+geom_step(data=sdata, aes(x=time, y=surv, col=strata, linetype=strata))
#Return the ggplot2 object
kmplot
}
Her tabaka için döngüler için kullanan bir önceki sürümü yazdım, ama daha yavaş oldu. Programcı olmadığım için, işlevi iyileştirmek için tavsiyede bulunacağım. Belki risk altındaki hastalarla bir veri tablosu veya ggplot2 çerçevesinde daha iyi bir bütünleşme ekleyebiliriz.
Teşekkür
Thats tam olarak, ancak aşağıdaki hatayı alıyorum dolgu seçeneği ile grafiği kullanmaya çalışıyor gerekenler: vecseq içinde Hatası (F__, len__, eğer (allow.cartesian || notjoin) BOŞ başka as.integer (max (nrow (x),: 32 satırda sonuçlara katılın; 28 = maks (nrow (x), nrow (i)) ... Devam etmek istediğinizden eminseniz, allow.cartesian = ile yeniden çalışın. TRUE. ... Ne anlama geldiğini anlamaya çalıştım ama anlamadım, bir fikrin var mı? –