r - wrapping ggplot around a function -
i have following code seems work when have below
p<-ggplot(data=x.all.er, aes(x=year, y=value, fill = (factor(x.all.er$strategy))))+ geom_bar(stat = 'identity',position = 'dodge', colour = "black") + scale_fill_manual(values = mycols) + scale_y_continuous(breaks= seq(-0.3,0.3,by=0.025), labels = percent) + ylab("eret") + theme(axis.title.y = element_text(size=15, face = "bold"))+ xlab("year") + theme(axis.title.x = element_text(size=15, face = "bold")) print(p) but when try wrap around function gives me errors. appreciated. thanks!
mybar<-function(ds, x, y, fillby, labels, mycols, xlabel, xbreaks, ylabel, title) { #my.cols =c("#f7fbff", "#deebf7", "#c6dbef", "#9ecae1", "#6baed6", # "#000000","#2171b5") p<-ggplot(data=ds, aes(x=x, y=y, fill = fillby)+ geom_bar(stat = 'identity',position = 'dodge', colour = "black") + scale_fill_manual(values = mycols) + scale_y_continuous(breaks= xbreaks, labels = percent) + ylab(ylabel) + theme(axis.title.y = element_text(size=15, face = "bold"))+ xlab(xlabel) + theme(axis.title.x = element_text(size=15, face = "bold")) print(p) }
you can type x=x instead of x="x" in ggplot2 because ds data.frame attached within function (see ?with idea of what's going on). call ggplot looking variable named fillby in ds data frame, there isn't one. recommended in comments, way around aes_string function.
library(ggplot2) df = data.frame( xx=1:10, yy=1:10+rnorm(10) ) # regular use of ggplot ggplot(df,aes(x=xx,y=yy)) + geom_point() # wrapping ggplot in function myggplot = function( df, x, y) { ggplot(df,aes(x=x,y=y)) + geom_point() } myggplot(df,x,y) ## error in eval(expr, envir, enclos) : object 'x' not found the problem ggplot looking x column in data.frame because of ggplot(df,aes(x=x,y=y)) in myggplot. note work fine.
names(df) = c("x","y") myggplot(df,x,y) but this.
names(df) = c("x","y") myggplot(df,null,na) the fix:
df = data.frame( xx=1:10, yy=1:10+rnorm(10) ) myggplot2 = function( df, x, y) { ggplot(df,aes_string(x=x,y=y)) + geom_point() } myggplot2(df,"xx","yy") if want avoid having write quotes, do
myggplot3 = function( df, x, y) { ggplot(df,aes_string(x=deparse(substitute(x)), y=deparse(substitute(y)))) + geom_point() } myggplot3(df,xx,yy)
Comments
Post a Comment