Ggplot2 axis label from column name of apply function iteration

Viewed 503

I would like to change the y axis label (or main title would also be fine) of a ggplot to reflect the column name being iterated over within an apply function.

Here is some sample data and my working apply function:

trial_df <- data.frame("Patient" = c(1,1,2,2,3,3,4,4), 
                       "Outcome" = c("NED", "NED", "NED", "NED", "Relapse","Relapse","Relapse","Relapse"),
                       "Time_Point" = c("Baseline", "Week3", "Baseline", "Week3","Baseline", "Week3","Baseline", "Week3"),
                       "CD4_Param" = c(50.8,53.1,20.3,18.1,30.8,24.5,35.2,31.0),
                       "CD8_Param" = c(5.3,9.7,4.4,4.3,3.1,3.2,5.6,5.3),
                       "CD3_Param" = c(11.6,16.6,5.0,5.1,14.3,7.1,5.9,8.1))

apply(trial_df[,4:length(trial_df)], 2, function(i) ggplot(data = trial_df, aes_string(x = "Time_Point", y = i )) +
        facet_wrap(~Outcome) +
        geom_boxplot(alpha = 0.1) +
        geom_point(aes(color = `Outcome`, fill = `Outcome`)) +
        geom_path(aes(group = `Patient`, color = `Outcome`)) +
        theme_minimal() +
        ggpubr::stat_compare_means( method = "wilcox.test") +
        scale_fill_manual(values=c("blue", "red")) +
        scale_color_manual(values=c("blue", "red"))) 

Example plot output

This creates 3 graphs as expected, however the y axis just says "y". I would like this to display the column name for the column in that iteration. It would also be fine to add a main title with this information, as I just need to know which graph corresponds to which column.

Here are things I have already tried adding to the ggplot code above based on some similar questions I found, but all of them give me the error "non-numeric argument to binary operator":

ggtitle(paste(i)) labs(y = i) labs(y = as.character(i))

Any help or resources I may have missed would be greatly appreciated, thanks!

1 Answers

So.....for the strangest of reasons I cannot figure out why. This gives what you want but for only one graph!!!

apply(trial_df[,4:length(trial_df)], 2, function(i) ggplot(data = trial_df, aes_string(x = "Time_Point", y = i )) +
        facet_wrap(~Outcome) +
        geom_boxplot(alpha = 0.1) +
        geom_point(aes(color = `Outcome`, fill = `Outcome`)) +
        geom_path(aes(group = `Patient`, color = `Outcome`)) +
        theme_minimal() +
        stat_compare_means( method = "wilcox.test") +
        scale_fill_manual(values=c("blue", "red")) +
        scale_color_manual(values=c("blue", "red"))+
        labs(y=colnames(trial_df)[i])) 

Gives these: enter image description here enter image description here enter image description here

Related