web-dev-qa-db-fra.com

ggplot2 - zone d'ombre entre deux lignes verticales

J'utilise ggplot2 pour créer des nuages ​​de points assez simples. J'ai actuellement deux lignes verticales simples utilisant:

... + geom_vline(xintercept=159684.186,linetype="dotted",size=0.6)+
geom_vline(xintercept=159683.438,linetype="dotted",size=0.6)+ ...

Quelqu'un peut-il me dire comment ombrer la zone entre ces deux lignes du haut de l'axe Y à l'axe X?

35
P H

Vous pouvez utiliser geom_rect.

... + geom_rect(aes(xmin=159683.438, xmax=159684.186, ymin=0, ymax=Inf))

Les deux valeurs de x proviennent de votre geom_vline appels. en utilisant ymin=0 le ramène à 0; ymax=Inf le mènera jusqu'au sommet de l'axe. Si vous voulez qu'il aille jusqu'à l'axe des x plutôt que 0, vous pouvez utiliser ymin=-Inf.

Quelques notes:

Cela fonctionne mieux s'il est au début de l'ordre des géomètres afin qu'il soit dessiné en premier/en dessous des autres parties (en particulier les données du nuage de points).

Vous pouvez définir la couleur de remplissage (fill esthétique) en dehors de l'appel aes à une valeur fixe. Je voudrais également définir la transparence (alpha) à quelque chose comme 0,5 afin que les éléments derrière elle (les lignes de la grille, très probablement, si vous le mettez en tant que premier geom) soient toujours visibles.

51
Brian Diggs

Il peut être encore plus facile d'utiliser annotate() pour cela si vous connaissez les coordonnées pour quelle région vous souhaitez ombrer. J'ai rencontré d'étranges problèmes de rendu lorsque j'ai essayé d'utiliser geom_rect().

library(ggplot2)
data(mtcars)

ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() +
     annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21,
        alpha = .2)

Je sais que c'est essentiellement la même chose; Je suis juste tombé sur cette friandise de ici .

25
James