| Title: | Tools for Creating Swimmers Plots using 'ggplot2' |
|---|---|
| Description: | Used for creating swimmers plots with functions to customize the bars, add points, add lines, add text, and add arrows. |
| Authors: | Jessica Weiss <[email protected]>, Wei Xu<[email protected]> |
| Maintainer: | Jessica Weiss <[email protected]> |
| License: | GPL-3 |
| Version: | 1.2.0 |
| Built: | 2026-06-08 08:59:01 UTC |
| Source: | https://github.com/cran/swimplot |
A dataset containing the adverse event information from a simulated clinical trial
ClinicalTrial.AEClinicalTrial.AE
A data frame with 11 rows and 6 variables:
Patient id
Time of an adverse event (AE)
Type of adverse event (AE)
Patient Sex
Age of patient at trial entry date
Likelihood the treatment is related to the adverse event
A dataset containing the treatment arm information from a simulated clinical trial
ClinicalTrial.ArmClinicalTrial.Arm
A data frame with 53 rows and 6 variables:
Patient id
Treatment Arm
Time since enrollment to the end of treatment, in months
Continued treatment past end of follow up
Patient Sex
Age of patient at trial entry date
A dataset containing the response information from a simulated clinical trial
ClinicalTrial.ResponseClinicalTrial.Response
A data frame with 36 rows and 7 variables:
Patient id
Time of starting response, in months since enrollment
Time of ending response, in months since enrollment
Type of response, CR = Complete response, and PR = Partial response
Continued response past end of follow up
Patient Sex
Age of patient at trial entry date
A dataset containing the Stage information from a simulated clinical trial
ClinicalTrial.StageClinicalTrial.Stage
A data frame with 36 rows and 2 variables:
Patient id
Patients clinical stage at enrollment of the study (either Early Stage or Late Stage)
This function formats a dataframe; used with swimmer_lines
line_df_to_point_df(df_lines, start = "start", end = "end", cont = NULL)line_df_to_point_df(df_lines, start = "start", end = "end", cont = NULL)
df_lines |
a dataframe |
start |
start column name |
end |
end column name |
cont |
continue column name |
a dataframe in a format for adding points to a swimmers plot
This function allows you to add arrows to a swimmers plot created with
swimmer_plot
swimmer_arrows( df_arrows, id = "id", arrow_start = "end", cont = NULL, adj.y = 0, name_col = NULL, arrow_positions = c(0.1, 1), angle = 30, length = 0.1, type = "closed", ... )swimmer_arrows( df_arrows, id = "id", arrow_start = "end", cont = NULL, adj.y = 0, name_col = NULL, arrow_positions = c(0.1, 1), angle = 30, length = 0.1, type = "closed", ... )
df_arrows |
a data frame |
id |
column name for id, default is 'id' |
arrow_start |
column name with the arrow locations default is "end" |
cont |
a column name including an indicator of which ids have an arrow (NA is no arrow); when NULL will use all use all of df_arrows |
adj.y |
amount to adjust the line within the box vertically (default is 0, line is in the centre of each bar) |
name_col |
a column name to map the arrow colour |
arrow_positions |
a vector of the distance from the arrow start to end, default is c(0.1,1) |
angle |
the angle of the arrow head in degrees (smaller numbers produce narrower, pointier arrows). Essentially describes the width of the arrow head. Default is 30 |
length |
a unit specifying the length of the arrow head (from tip to base in inches (default is 0.1)' |
type |
one of "open" or "closed" indicating whether the arrow head should be a closed triangle. Default is 'closed' |
... |
additional geom_segment() arguments |
a swimmer plot with arrows
swimmer_plot swimmer_points swimmer_lines swimmer_lines swimmer_points_from_lines swimmer_text
#Mapping the arrows to the bars swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order = 'Arm') swim_plot_with_arrows <- swim_plot+ swimmer_arrows(df_arrows=ClinicalTrial.Arm,id='id',arrow_start='End_trt', cont = 'Continued_treatment',name_col='Arm',show.legend = FALSE,type = "open",cex=1.25) swim_plot_with_arrows+ ggplot2::scale_color_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"),drop=FALSE)+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') #Mapping the arrows to lines #Start with a base swimmer plot with lines and points swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order = 'Arm')+ swimmer_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end='Response_end',name_col='Response',size=3)+ swimmer_points_from_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end = 'Response_end',cont = 'Continued_response',name_col='Response',size=4) # Then add arrows to the plot swim_plot_with_arrows <- swim_plot+ swimmer_arrows(df_arrows=ClinicalTrial.Response,id='id',arrow_start='Response_end', cont = 'Continued_response',name_col='Response',show.legend = FALSE,type = "open",cex=1.25) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_arrows+ ggplot2::scale_color_manual(name="Response",values=c("grey20","grey80"))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')+ ggplot2::guides(fill = ggplot2::guide_legend(override.aes = list(shape = NA)))+ ggplot2::scale_shape_manual(name='',values=c(17,15),breaks = c('Response_start','Response_end'),labels=c('Response Start','Response End'))#Mapping the arrows to the bars swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order = 'Arm') swim_plot_with_arrows <- swim_plot+ swimmer_arrows(df_arrows=ClinicalTrial.Arm,id='id',arrow_start='End_trt', cont = 'Continued_treatment',name_col='Arm',show.legend = FALSE,type = "open",cex=1.25) swim_plot_with_arrows+ ggplot2::scale_color_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"),drop=FALSE)+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') #Mapping the arrows to lines #Start with a base swimmer plot with lines and points swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order = 'Arm')+ swimmer_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end='Response_end',name_col='Response',size=3)+ swimmer_points_from_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end = 'Response_end',cont = 'Continued_response',name_col='Response',size=4) # Then add arrows to the plot swim_plot_with_arrows <- swim_plot+ swimmer_arrows(df_arrows=ClinicalTrial.Response,id='id',arrow_start='Response_end', cont = 'Continued_response',name_col='Response',show.legend = FALSE,type = "open",cex=1.25) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_arrows+ ggplot2::scale_color_manual(name="Response",values=c("grey20","grey80"))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')+ ggplot2::guides(fill = ggplot2::guide_legend(override.aes = list(shape = NA)))+ ggplot2::scale_shape_manual(name='',values=c(17,15),breaks = c('Response_start','Response_end'),labels=c('Response Start','Response End'))
This function allows you to add lines to a swimmers plot created with swimmer_plot
swimmer_lines( df_lines, id = "id", start = "start", end = "end", adj.y = 0, name_linetype = NULL, name_col = NULL, name_size = NULL, name_alpha = NULL, ... )swimmer_lines( df_lines, id = "id", start = "start", end = "end", adj.y = 0, name_linetype = NULL, name_col = NULL, name_size = NULL, name_alpha = NULL, ... )
df_lines |
a data frame |
id |
column name for id, default is 'id' |
start |
column name with the line start locations |
end |
column name with the line end locations |
adj.y |
amount to adjust the line within the box vertically (default is 0, line is in the centre of each bar) |
name_linetype |
a column name to map the line type |
name_col |
a column name to map the line colour |
name_size |
a column name to map the line size |
name_alpha |
a column name to map the line transparency |
... |
additional geom_segment() arguments |
a swimmer plot with lines
swimmer_plot swimmer_points swimmer_lines swimmer_points_from_lines swimmer_arrows swimmer_text
#Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') # Then add lines to the plot swim_plot_with_lines <- swim_plot + swimmer_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end='Response_end',name_col='Response',size=3) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_lines + ggplot2::scale_color_manual(name="Response",values=c("grey20","grey80"))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')#Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') # Then add lines to the plot swim_plot_with_lines <- swim_plot + swimmer_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end='Response_end',name_col='Response',size=3) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_lines + ggplot2::scale_color_manual(name="Response",values=c("grey20","grey80"))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')
This function allows you to create swimmers plots with bars, includes options to have the bars change colours and create stratified plots
swimmer_plot( df, id = "id", end = "end", start = "start", name_fill = NULL, name_col = NULL, name_alpha = NULL, increasing = TRUE, id_order = NULL, stratify = FALSE, base_size = 11, identifiers = TRUE, ... )swimmer_plot( df, id = "id", end = "end", start = "start", name_fill = NULL, name_col = NULL, name_alpha = NULL, increasing = TRUE, id_order = NULL, stratify = FALSE, base_size = 11, identifiers = TRUE, ... )
df |
a data frame |
id |
column name for id, default is 'id' |
end |
column name with the bar lengths (or bar end positions if bars change colour), default is 'end' |
start |
column name with the bar start positions (only required when there are gaps between sections of bars, or bars which do not start at zero), default is 'start' |
name_fill |
a column name to map the bar fill |
name_col |
a column name to map the bar colour |
name_alpha |
a column name to map the bar transparency |
increasing |
Binary to specify bars in increasing order (Default is TRUE) |
id_order |
order of the bars by id, can input a column name to sort by, or the ids in order. |
stratify |
a list of column names to stratify by |
base_size |
the base size for the plot, default is 11 |
identifiers |
Binary to specify patient identifiers are included in the y axis (default is TRUE) |
... |
additional geom_col() arguments |
a swimmer plot with bars
swimmer_points swimmer_lines swimmer_lines swimmer_points_from_lines swimmer_arrows swimmer_text
swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') # Add ggplot layers to improve the plot's aesthetic swim_plot + ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') #Example with Stratification swim_plot_stratify <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm', col="black",alpha=0.75,width=.8,base_size = 18,stratify= c('Age','Sex')) swim_plot_stratify + ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') #Example when there are gaps between the bars and bars do not start at zero #Both a start and end time need to be specified when there are gaps between sections of bars Gap_data <- data.frame(patient_ID=c('ID:3','ID:1','ID:1','ID:1','ID:2', 'ID:2','ID:2','ID:3','ID:3','ID:2'), start=c(10,1,2,7,2,10,14,5,0,22), end=c(20,2,4,10,7,14,22,7,3,26), treatment=c("A","B","C","A","A","C","A","B","C",NA)) swimmer_plot(df=Gap_data,id='patient_ID',name_fill="treatment",col=1,identifiers=FALSE, id_order = c('ID:1','ID:2','ID:3')) + ggplot2::theme_bw()+ggplot2::scale_fill_manual(name="Treatment", values=c("A"="#e41a1c", "B"="#377eb8","C"="#4daf4a",na.value=NA),breaks=c("A","B","C"))+ ggplot2::scale_y_continuous(breaks=c(0:26))swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') # Add ggplot layers to improve the plot's aesthetic swim_plot + ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') #Example with Stratification swim_plot_stratify <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm', col="black",alpha=0.75,width=.8,base_size = 18,stratify= c('Age','Sex')) swim_plot_stratify + ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') #Example when there are gaps between the bars and bars do not start at zero #Both a start and end time need to be specified when there are gaps between sections of bars Gap_data <- data.frame(patient_ID=c('ID:3','ID:1','ID:1','ID:1','ID:2', 'ID:2','ID:2','ID:3','ID:3','ID:2'), start=c(10,1,2,7,2,10,14,5,0,22), end=c(20,2,4,10,7,14,22,7,3,26), treatment=c("A","B","C","A","A","C","A","B","C",NA)) swimmer_plot(df=Gap_data,id='patient_ID',name_fill="treatment",col=1,identifiers=FALSE, id_order = c('ID:1','ID:2','ID:3')) + ggplot2::theme_bw()+ggplot2::scale_fill_manual(name="Treatment", values=c("A"="#e41a1c", "B"="#377eb8","C"="#4daf4a",na.value=NA),breaks=c("A","B","C"))+ ggplot2::scale_y_continuous(breaks=c(0:26))
This function allows you to add points to a swimmers plot created with swimmer_plot
swimmer_points( df_points, id = "id", time = "time", adj.y = 0, name_shape = NULL, name_col = NULL, name_size = NULL, name_fill = NULL, name_stroke = NULL, name_alpha = NULL, ... )swimmer_points( df_points, id = "id", time = "time", adj.y = 0, name_shape = NULL, name_col = NULL, name_size = NULL, name_fill = NULL, name_stroke = NULL, name_alpha = NULL, ... )
df_points |
a data frame |
id |
column name for id, default is 'id' |
time |
column name with the point locations |
adj.y |
amount to adjust the point within the box vertically (default is 0, point is in the centre of each bar) |
name_shape |
a column name to map the point shape |
name_col |
a column name to map the point colour |
name_size |
a column name to map the point size |
name_fill |
a column name to map the point fill |
name_stroke |
a column name to map the point stroke |
name_alpha |
a column name to map the point transparency |
... |
additional geom_point() arguments |
a swimmer plot with points
swimmer_plot swimmer_lines swimmer_lines swimmer_points_from_lines swimmer_arrows swimmer_text
#Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') # Then add points to the plot swim_plot_with_points <- swim_plot + swimmer_points(df_points= ClinicalTrial.AE,id='id',time='time',name_shape = 'event',size=3,fill='white',col='black') # Add ggplot layers to improve the plot's aesthetic swim_plot_with_points + ggplot2::scale_shape_manual(name="Adverse event",values=c(21,24,17),breaks=c('AE','SAE','Death'))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') ##Another example with the colour and shape mapped to different columns #Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') swim_plot + swimmer_points(df_points=ClinicalTrial.AE,id='id',time='time',name_shape = 'event',fill='white',name_col = 'Related',size=5)+ ggplot2::scale_shape_manual(name="Adverse event",values=c(16,17,18),breaks=c('AE','SAE','Death'))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') + ggplot2::scale_color_manual(name="Likelihood related to treatment",values=c(1,'grey52','grey90'))#Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') # Then add points to the plot swim_plot_with_points <- swim_plot + swimmer_points(df_points= ClinicalTrial.AE,id='id',time='time',name_shape = 'event',size=3,fill='white',col='black') # Add ggplot layers to improve the plot's aesthetic swim_plot_with_points + ggplot2::scale_shape_manual(name="Adverse event",values=c(21,24,17),breaks=c('AE','SAE','Death'))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') ##Another example with the colour and shape mapped to different columns #Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black",id_order='Arm') swim_plot + swimmer_points(df_points=ClinicalTrial.AE,id='id',time='time',name_shape = 'event',fill='white',name_col = 'Related',size=5)+ ggplot2::scale_shape_manual(name="Adverse event",values=c(16,17,18),breaks=c('AE','SAE','Death'))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)') + ggplot2::scale_color_manual(name="Likelihood related to treatment",values=c(1,'grey52','grey90'))
This function will create points at the beginning and end of line to match with swimmer_lines.
swimmer_points_from_lines( df_lines, id = "id", start = "start", end = "end", cont = NULL, adj.y = 0, name_shape = "type", name_col = NULL, name_size = NULL, name_fill = NULL, name_stroke = NULL, name_alpha = NULL, ... )swimmer_points_from_lines( df_lines, id = "id", start = "start", end = "end", cont = NULL, adj.y = 0, name_shape = "type", name_col = NULL, name_size = NULL, name_fill = NULL, name_stroke = NULL, name_alpha = NULL, ... )
df_lines |
a data frame |
id |
column name for id, default is 'id' |
start |
column name where the line starts, default is 'start' |
end |
column name where the line ends, default is 'end' |
cont |
a column name of which lines continue (NA is does not continue) these will not have a point at the end of the line |
adj.y |
amount to adjust the point within the box vertically (default is 0, point is in the centre of each bar) |
name_shape |
a column name to map the point shape |
name_col |
a column name to map the point colour |
name_size |
a column name to map the point size |
name_fill |
a column name to map the point fill |
name_stroke |
a column name to map the point stroke |
name_alpha |
a column name to map the point transparency |
... |
additional geom_point() arguments |
a swimmer plot with points matching the lines
swimmer_plot swimmer_points swimmer_lines swimmer_lines swimmer_arrows swimmer_text
#Start with a base swimmer plot swim_plot <-swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black" ,id_order= 'Arm') # Then add lines to the plot swim_plot_with_lines <- swim_plot + swimmer_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end='Response_end',name_col='Response',size=3) # Add points to the start and end of the lines swim_plot_with_lines_and_points <- swim_plot_with_lines+ swimmer_points_from_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end = 'Response_end', cont = 'Continued_response',name_col='Response',size=4) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_lines_and_points + ggplot2::scale_color_manual(name="Response",values=c("grey20","grey80"))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')+ ggplot2::guides(fill = ggplot2::guide_legend(override.aes = list(shape = NA)))+ ggplot2::scale_shape_manual(name='',values=c(17,15),breaks = c('Response_start','Response_end'),labels=c('Response Start','Response End'))#Start with a base swimmer plot swim_plot <-swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',name_fill='Arm',col="black" ,id_order= 'Arm') # Then add lines to the plot swim_plot_with_lines <- swim_plot + swimmer_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end='Response_end',name_col='Response',size=3) # Add points to the start and end of the lines swim_plot_with_lines_and_points <- swim_plot_with_lines+ swimmer_points_from_lines(df_lines=ClinicalTrial.Response,id='id',start = 'Response_start',end = 'Response_end', cont = 'Continued_response',name_col='Response',size=4) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_lines_and_points + ggplot2::scale_color_manual(name="Response",values=c("grey20","grey80"))+ ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')+ ggplot2::guides(fill = ggplot2::guide_legend(override.aes = list(shape = NA)))+ ggplot2::scale_shape_manual(name='',values=c(17,15),breaks = c('Response_start','Response_end'),labels=c('Response Start','Response End'))
This function allows you to add text to a swimmers plot created with swimmer_plot
swimmer_text( df_text, id = "id", start = "start", label = "label", name_col = NULL, name_size = NULL, name_alpha = NULL, name_fontface = NULL, adj.y = 0, adj.x = 0, ... )swimmer_text( df_text, id = "id", start = "start", label = "label", name_col = NULL, name_size = NULL, name_alpha = NULL, name_fontface = NULL, adj.y = 0, adj.x = 0, ... )
df_text |
a data frame |
id |
column name for id, default is 'id' |
start |
column name with the text start locations (if there is no start column will default 0 for all text) |
label |
a column with the text to be added to the plot |
name_col |
a column name to map the text colour |
name_size |
a column name to map the text size |
name_alpha |
a column name to map the text transparency |
name_fontface |
a column name to map the text fontface ("plain", "bold", "italic", "bold.italic" can all be used) |
adj.y |
amount to adjust the text within the box vertically (default is 0, text is in the centre of each bar) |
adj.x |
amount to adjust the text within the box horizontally (default is 0, text starts at the origin) |
... |
additional geom_text() arguments |
a swimmer plot with text on the bars
swimmer_plot swimmer_points swimmer_lines swimmer_points_from_lines swimmer_arrows
#Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt', name_fill='Arm',col="black",id_order='Arm',alpha=0.6) # Then add text to the plot swim_plot_with_text <- swim_plot + swimmer_text(df_text = ClinicalTrial.Stage,label = 'Stage',size=3, fontface=ifelse(ClinicalTrial.Stage$Stage=="Early Stage","bold","plain")) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_text + ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')#Start with a base swimmer plot swim_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt', name_fill='Arm',col="black",id_order='Arm',alpha=0.6) # Then add text to the plot swim_plot_with_text <- swim_plot + swimmer_text(df_text = ClinicalTrial.Stage,label = 'Stage',size=3, fontface=ifelse(ClinicalTrial.Stage$Stage=="Early Stage","bold","plain")) # Add ggplot layers to improve the plot's aesthetic swim_plot_with_text + ggplot2::scale_fill_manual(name="Treatment",values=c("#e41a1c", "#377eb8","#4daf4a"))+ ggplot2::ylab('Time (Days)')