geom_ribbon doesn't work - Error in eval(expr, envir, enclos) : object 'variable' not found

StackOverflow https://stackoverflow.com/questions/19891637

  •  30-07-2022
  •  | 
  •  

Pregunta

I try to add a geom_ribbon object to my ggplot2 plot. In my data frame, I have NA values that (I guess) may cause a problem. This is a reproducible example of the data frame I have:

base <- c(1:10, rep(NA, 10))
output1 <- c(rep(NA, 9), 10 - 0:10)
output2 <- c(rep(NA, 9), 10 + 0:10)
xaxis <- 1:20

df <- data.frame(xaxis, base, output1, output2)
df

     xaxis base output1 output2
  1      1    1      NA      NA
  2      2    2      NA      NA
  3      3    3      NA      NA
  4      4    4      NA      NA
  5      5    5      NA      NA
  6      6    6      NA      NA
  7      7    7      NA      NA
  8      8    8      NA      NA
  9      9    9      NA      NA
  10    10   10      10      10
  11    11   NA       9      11
  12    12   NA       8      12
  13    13   NA       7      13
  14    14   NA       6      14
  15    15   NA       5      15
  16    16   NA       4      16
  17    17   NA       3      17
  18    18   NA       2      18
  19    19   NA       1      19
  20    20   NA       0      20

And my attempt to plot a ggplot2 object with a geom_ribbon:

  dfm <- melt(df, id=1)
  ggplot(dfm, aes(x = xaxis, y = value, colour = variable)) + 
    geom_line(aes(group=variable)) + 
    geom_ribbon(data=df, aes(group = 1, ymin=output1, ymax=output2))

And, eventually, I got an error I cannot deal with:

Error in eval(expr, envir, enclos) : object 'variable' not found

Thank you in advance for any suggestions.

¿Fue útil?

Solución

You got this error because variable is used for color in aes() of function ggplot(). When you add geom_ribbon() with new data frame geom_ribbon() tries to find variable in new data frame to use it for colors. To ignore this variable add inherit.aes=FALSE inside geom_ribbon() - so you are telling that all parameters should be taken independently - that's way you should set x=xaxis again in geom_ribbon().

ggplot(dfm, aes(x = xaxis, y = value, colour = variable)) + 
  geom_line(aes(group=variable)) + 
  geom_ribbon(data=df, aes(group = 1, x = xaxis,ymin=output1, ymax=output2),
                       inherit.aes=FALSE)

Otros consejos

The definition for color = variable is being carried over from the original ggplot layer. Override it in the call to geom_ribbon to make it work: geom_ribbon(data = df, aes(group = 1, ymin=output1, ymax=output2, color=I('red')).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top