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
cart<-read.csv("C:/Users/ftan/OneDrive - Nektar Therapeutics/desktop/All/Nektar/Nktr255/IST/s.csv", fileEncoding="UTF-8-BOM",  na.strings='')
carta<- cart %>% filter(!is.na(time.from.CAR.T.to.last.NKTR.dose)) %>% 
mutate(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)" )))


cart1<-select(carta,-dday2, -dday3, -dday4, -dday5) %>%
       mutate(dday=dday1)

cart2<-filter(carta, !is.na(dday2))%>%
       select(-dday1, -dday3, -dday4, -dday5) %>%
       mutate(dday=dday2)

cart3<-filter(carta, !is.na(dday3))%>%
       select(-dday1, -dday2, -dday4, -dday5) %>%
       mutate(dday=dday3)

cart4<-filter(carta, !is.na(dday4))%>%
       select(-dday1, -dday3, -dday2, -dday5) %>%
       mutate(dday=dday4)

cart5<-filter(carta, !is.na(dday5))%>%
       select(-dday1, -dday3, -dday4, -dday2) %>%
       mutate(dday=dday5)


a1<-bind_rows(cart1,cart2)
a2<-bind_rows(a1, cart3)
a3<-bind_rows(a2,cart4)
a4<-bind_rows(a3,cart5)

all <- a4 %>% arrange(Patient, dday) %>% select(-dday1, -dday2,-dday3,-dday4,-dday5) %>%
              mutate(ex=ifelse(is.na(NKTR_1), NA, "NKTR-255 Dose"))


r<- filter(carta, status!="No Relapse")

1 Swimmer Lane

1.1 GGplot v1

carta$Patient= with (carta, factor(Patient, levels=Patient[order(ave(tos, dose, FUN=min),tos)]))

p11 <- ggplot(carta, aes(x=Patient, y=tos, fill=dose)) +
       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"

p12 <- p11+  geom_point(data=carta,  aes(Patient, tos, shape=`Relapse/Censoring`), size=4)+
        scale_shape_manual(values=c(0,4,17))
p12

1.2 GGplot v2

p1 <- ggplot(carta, aes(Patient, tos)) +
  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())
p2 <- p1+  geom_point(data=r,  aes(Patient, tos, shape=status), size=4)+
      scale_shape_manual(values=c(0,16,4,1))
p2

1.3 Swimmer_plot

ssub <- swimmer_plot(df=carta, id="Patient", 
            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'))+
  ggplot2::ylab('Time from CAR-T infusion to relapse or censoring by last follow up or Allo transplant') + 
  ggplot2::xlab('Subject ID') +
  theme_bw() +  theme(panel.border = element_blank(), panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
ssub

2 Data

color<- function(data,var,color,l){
  datatable(data, options = list(
  pageLength = l), escape=FALSE) %>% formatStyle(names(data),
                                fontSize="80%",
  background = styleColorBar(var, color),
  backgroundSize = '88% 78%',
  backgroundRepeat = 'no-repeat',
  backgroundPosition = 'left')
}

all1 <- all%>% select(Patient, dose, Relapse.or.Censoring, tos, tos1,dday, Relapse)
color(all1,all1$dday,"#c50047", 10)