2017-05-09 1 views
1

J'ai essayé de trouver les possibilités d'ombrer la zone entre deux lignes dans ggplot qui sont définies par fonction. J'ai trouvé des solutions utilisant geom_area ou geom_ribbon mais dans les deux cas vous avez besoin d'une base de données dans laquelle vous définissez ymin et ymax. Y a-t-il une autre possibilité? De la même façon que les ymin et ymax sont définis avec les mêmes fonctions que les lignes?Zone d'ombrage entre deux lignes définies avec la fonction dans ggplot

Voici mon exsample:

myplot <- ggplot(data.frame(x=c(0, 100)), aes(x=x)) + 
stat_function(fun= function(x)20*sqrt(x), geom="line", colour= "black", size= 1) + 
stat_function(fun= function(x)50*sqrt(x), geom="line", colour= "black", size= 1) 
myplot 

enter image description here

Merci pour votre aide à l'avance.

Répondre

5

Essayez d'insérer les fonctions dans le bloc de données qui alimente la figure. Ensuite, vous pouvez utiliser geom_ribbon pour remplir la zone entre les deux fonctions.

mydata = data.frame(x=c(0:100), 
        func1 = sapply(mydata$x, FUN = function(x){20*sqrt(x)}), 
        func2 = sapply(mydata$x, FUN = function(x){50*sqrt(x)})) 

ggplot(mydata, aes(x=x, y = func2)) + 
    geom_line(aes(y = func1)) + 
    geom_line(aes(y = func2)) + 
    geom_ribbon(aes(ymin = func2, ymax = func1), fill = "blue", alpha = .5) 

enter image description here