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

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

  •  30-07-2022
  •  | 
  •  

Frage

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.

War es hilfreich?

Lösung

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)

Andere Tipps

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')).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top