Here is an example:
require(ggplot2)
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
yintercept <- c(5, 12, 20, 28, 29, 40)
col <- c("red", "blue", "green", "pink", "yellow", "tan")
# for the first level yintercept, and col
p + geom_hline(aes(yintercept = 5), col = "red")
I have more levels of variables as listed above, instead of writing long "+" formula, can I loop the process. Sorry for simple question.
Edits: how to loop over the x or y variables in the formula
myd <- data.frame (y = rnorm (100, 5, 10), X1 = rnorm (100, 5, 1),
X3 = rnorm (100, 10, 2), X4 = rnorm (100, 50,4))
x <- c("X1", "X2", "X3", "X4")
p <- ggplot(myd, aes(y = y)) +
mapply ( function (x) (geom_point(x = aes_string (x))))
The ggplot2 way to do this is to always put data in a data frame and map the aesthetic. It makes things much simpler:
df <- data.frame(yint = yintercept)
# for the first level yintercept, and col
p + geom_hline(data = df,aes(yintercept=yint,colour = factor(yint))) +
scale_colour_manual(values = col,guide = "none")
Try
p+mapply(function(a,b){dum<-aes_string(yintercept=a);
geom_hline(dum, col = b)},a=yintercept,b=col)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With