if else condition in ggplot to add an extra layer

ggplot2, if-statement, r

Solution

What you are seeing is a syntax error. The most robust way I can think of is:

tmp.data<-c(1,2,3) 
if(tmp.data[1]!="no value") {
   p = p + geom_point()
}
p + geom_line()

So you compose the object `p` in a sequence, only adding `geom_point()` when the if statements yields `TRUE`.

Problem

say I want to plot two layers in ggplot, one containing points and another one containing lines if a certain criteria is fulfilled. The code without the criteria could look like this: ``` library("ggplot2") # Summarise number of movie ratings by year of movie mry <- do.call(rbind, by(movies, round(movies$rating), function(df) { nums <- tapply(df$length, df$year, length) data.frame(rating=round(df$rating[1]), year = as.numeric(names(nums)), number=as.vector(nums)) })) p <- ggplot(mry, aes(x=year, y=number, group=rating)) p + geom_point()+ geom_line() ``` now the condition for plotting the points and not only the lines would be, that an object called tmp.data does not equal the expression "no value". ``` tmp.data<-c(1,2,3) # in this case the condition is fulfilled # attempt to plot the two layers including the condition in the plotting function p+ if(tmp.data[1]!="no value"){ geom_point()+} geom_line() ``` fails.... ``` Error: unexpected '}' in: "p+ if(tmp.data[1]!="no value"){ geom_point()+}" ``` geom_line() geom_line: stat_identity: position_identity: (width = NULL, height = NULL)

Original source