I would like to change the default colours to a specific palette for all geom_*
type objects by using a function.
Below is an example for geom_line()
and using the function change_colours()
# load ggplot2 and tidyr library
require(ggplot2)
require(tidyr)
# create a mock data frame
df <- data.frame(cbind(var1=500*cumprod(1+rnorm(300, 0, 0.04)),
var2=400*cumprod(1+rnorm(300, 0, 0.04)),
var3=300*cumprod(1+rnorm(300, 0, 0.04))))
df$TS <- as.POSIXct(Sys.time()+seq(300))
df <- gather(df, stock, price, -TS)
# create basic base graph
p <- ggplot(df, aes(x=TS, y=price, group=stock))+geom_line(aes(colour=stock))
# custom pallet
custom_pal <- c("#002776", "#81BC00", "#00A1DE", "#72C7E7", "#3C8A2E", "#BDD203",
"#313131", "#335291", "#9AC933", "#33B4E5", "#8ED2EC", "#63A158",
"#CADB35", "#575757", "#4C689F", "#A7D04C", "#4CBDE8", "#9DD8EE",
"#76AD6D", "#D1DF4F", "#8C8C8C", "#7F93BA", "#C0DE80", "#80D0EE",
"#B8E3F3", "#9DC496", "#DEE881", "#B4B4B4", "#99A9C8", "#CDE499",
"#99D9F2", "#C7E9F5", "#B1D0AB", "#E5ED9A", "#DCDCDC")
# the function the change colours
change_colours <- function(ggplot_obj, pal){
p <- ggplot_obj
group_data <- p$data[, as.character(p$mapping$group)]
n_groups <- length(unique(group_data))
group_data_cols <- pal[group_data]
p + theme_light()+ geom_line(colour=group_data_cols)
}
p
p1 <- change_colours(ggplot_obj=p, pal=custom_pal)
p1
I am hoping to change the change_colours()
function to be more generic for all geom_*
type layers
Any help would be much appreciated.