Outline
There are many different ways to present Swimmer plot of patient’s response info, we will provide two example of Swimmer plot
Note: we used Dummy data for the swimmer plot example
Load data
#Excel :relapse
<-read.csv("C:/Users/ftan/OneDrive - Nektar Therapeutics/desktop/All/Nektar/Nktr255/IST/s.csv", fileEncoding="UTF-8-BOM", na.strings='') cart
<- cart %>% filter(!is.na(time.from.CAR.T.to.last.NKTR.dose)) %>%
cartamutate(tos=time.to.relapse.censor.last.fu.from.CAR.T,na.rm = TRUE) %>%
mutate(tos1=tos+5, cont=ifelse(Relapse=="no", "Y", NA) ,
text=ifelse(Relapse=="yes" , paste ("Relapse" ,as.character(Date.of.relapse)),
ifelse(Relapse!="yes" & !is.na(Date.of.censor),paste ("Allo_Transplant", as.character(Date.of.censor)),
paste("Last FU", as.character(Date.last.fu)))),
status=ifelse(Relapse=="yes" , "Relapse",
ifelse(Relapse!="yes" & !is.na(Date.of.censor), "Allo_Transplant", "No Relapse")),
Relapse.or.Censoring=ifelse(Relapse=="yes" , "Relapse",
ifelse(Relapse!="yes" & !is.na(Date.of.censor), "Censoring (Allo Transplant)",
"Censoring (last follow up)" )))
<-select(carta,-dday2, -dday3, -dday4, -dday5) %>%
cart1mutate(dday=dday1)
<-filter(carta, !is.na(dday2))%>%
cart2select(-dday1, -dday3, -dday4, -dday5) %>%
mutate(dday=dday2)
<-filter(carta, !is.na(dday3))%>%
cart3select(-dday1, -dday2, -dday4, -dday5) %>%
mutate(dday=dday3)
<-filter(carta, !is.na(dday4))%>%
cart4select(-dday1, -dday3, -dday2, -dday5) %>%
mutate(dday=dday4)
<-filter(carta, !is.na(dday5))%>%
cart5select(-dday1, -dday3, -dday4, -dday2) %>%
mutate(dday=dday5)
<-bind_rows(cart1,cart2)
a1<-bind_rows(a1, cart3)
a2<-bind_rows(a2,cart4)
a3<-bind_rows(a3,cart5)
a4
<- a4 %>% arrange(Patient, dday) %>% select(-dday1, -dday2,-dday3,-dday4,-dday5) %>%
all mutate(ex=ifelse(is.na(NKTR_1), NA, "NKTR-255 Dose"))
<- filter(carta, status!="No Relapse") r
$Patient= with (carta, factor(Patient, levels=Patient[order(ave(tos, dose, FUN=min),tos)]))
carta
<- ggplot(carta, aes(x=Patient, y=tos, fill=dose)) +
p11 geom_bar(stat="identity", width=0.7) +coord_flip()+
geom_point(data=all, aes(Patient, dday)) +
labs(fill="Drug Dose Level", colour="", x="Subject ID",
y="Time from CAR-T infusion to relapse/censoring") +
theme_bw() +
theme(panel.grid.minor=element_blank(),
panel.grid.major=element_blank())
colnames(carta)[29]<- "Relapse/Censoring"
<- p11+ geom_point(data=carta, aes(Patient, tos, shape=`Relapse/Censoring`), size=4)+
p12 scale_shape_manual(values=c(0,4,17))
p12
<- ggplot(carta, aes(Patient, tos)) +
p1 geom_bar(stat="identity", aes(fill=factor(dose)), width=0.7) +coord_flip()+
geom_point(data=all, aes(Patient, dday, shape=ex)) +
geom_segment(data=carta %>% filter(status=="No Relapse"),
aes(x=Patient, xend= Patient, y=tos+2, yend=tos1+8),
pch=10, size=0.5, arrow=arrow(type="closed", length=unit(0.07,"in")))+
scale_fill_manual(values=hcl(seq(15,375,length.out=5)[1:4],100,70))+
geom_text(aes(label=text), vjust=1.5 ,size=5, position = position_dodge(width=0.9),colour="blue")+
labs(fill="Dose level", colour="", shape="NKTR-255 Dose", x="Subject ID",
y="Time from CAR-T infusion to relapse or censoring by last follow up or Allo transplant") +
theme_bw() +
theme(panel.grid.minor=element_blank(),
panel.grid.major=element_blank())
<- p1+ geom_point(data=r, aes(Patient, tos, shape=status), size=4)+
p2 scale_shape_manual(values=c(0,16,4,1))
p2
<- swimmer_plot(df=carta, id="Patient",
ssub end= "tos", id_order='dose',name_fill='dose',width=.8,col="black",alpha=0.75) + swimmer_points(df_points=all,id='Patient',time='dday',name_shape = 'Relapse',size=2.5,fill='white') +
swimmer_lines(df_lines=subset(carta, Relapse=='no'),id='Patient',start='tos',end='tos1' ,show.legend = FALSE, size=1)+
swimmer_arrows(df_arrows=carta,id='Patient',arrow_start='tos1', cont='cont' ,
show.legend = FALSE,type ="open",cex=0.55) +
scale_fill_discrete('Dose Level') +
scale_shape_manual('Relapse',values=c(0,17),labels=c('No','Yes'))+
::ylab('Time from CAR-T infusion to relapse or censoring by last follow up or Allo transplant') +
ggplot2::xlab('Subject ID') +
ggplot2theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
ssub
<- function(data,var,color,l){
colordatatable(data, options = list(
pageLength = l), escape=FALSE) %>% formatStyle(names(data),
fontSize="80%",
background = styleColorBar(var, color),
backgroundSize = '88% 78%',
backgroundRepeat = 'no-repeat',
backgroundPosition = 'left')
}
<- all%>% select(Patient, dose, Relapse.or.Censoring, tos, tos1,dday, Relapse)
all1 color(all1,all1$dday,"#c50047", 10)