2016-07-06 2 views
0

Скажем, я создаю простой сюжет с помощью ggplot:Добавить отдельные затененные участки вокруг нескольких линий в ggplot2 объекте

data(mtcars) 
var1 <- mtcars$mpg 
var2 <- mtcars$mpg + 5 
df <- melt(cbind(var1,var2)) 
ggplot(df,aes(x=X1, y=value,color=X2))+geom_line() 

Я хотел бы обратить затененную область над каждой нарисованной линией.

Проблема в том, что я хотел бы использовать разные значения для каждой строки.

Я пробовал использовать geom_ribbon(), но я мог предоставить только значения заштрихованной области для одной из строк, но не для нескольких строк.

Есть ли способ построить geom_ribbon() для каждой линии отдельно?

+0

Вы не будете видеть большой разницы с '± 0.02' интервалами для ленты, учитывая масштаб вашего участка. Попробуйте '... + geom_ribbon (aes (ymin = value - 2, ymax = value + 2), fill =" red ") + geom_line()', и вы увидите, что он работает. – mtoto

+0

@mtoto: спасибо, ты прав. см. мой обновленный вопрос для реальной проблемы, что у меня есть – ghb

ответ

2

Это то, что вы хотите?

data(mtcars) 
var1 <- mtcars$mpg 
var2 <- mtcars$mpg + 15 
df <- melt(cbind(var1,var2)) 
df$shadv <- rep(c(2,6),each=length(var1)) 
df1 <- df[df$X2=="var1",] 
df2 <- df[df$X2=="var2",] 
ggplot(df,aes(x=X1, y=value,color=X2))+ 
    geom_ribbon(data=df1,aes(x = X1,ymin = value - shadv, ymax = value + shadv), inherit.aes = FALSE,fill = "lightblue")+ 
    geom_ribbon(data=df2,aes(x = X1,ymin = value - shadv, ymax = value + shadv), inherit.aes = FALSE,fill = "lightgreen")+ 
    geom_point()+geom_line() 

enter image description here

+0

большое спасибо за вашу помощь! Да, это почти то, что я ищу. Оставшаяся проблема заключается в том, что я хотел бы отрегулировать значение ymax ymax geom_ribbon отдельно для каждой строки. – ghb

+0

Отлично! Я рад принять ваш ответ, поскольку это то, о чем я просил! У меня есть еще один маленький вопрос: можно ли использовать те же цвета для затенения, что и линии? т.е. два отдельных цвета? – ghb