Même titre, complètement reformulé la question cependant.
Pourquoi l'alpha fonctionne-t-il dans la première parcelle mais pas dans la seconde? J'ai du mal à comprendre pourquoi, avec les valeurs codées en dur, le rect est dessiné au bon endroit mais pas transparent mais quand, dans un data.frame, cela fonctionne comme prévu?
mtcars$cyl <- factor(mtcars$cyl)
mtcars$am <- factor(mtcars$am)
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2)
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)
Merci d'avoir clarifié votre question. Cela me rendait perplexe, alors je suis allé sur Google et je me suis retrouvé à apprendre quelque chose de nouveau (après avoir corrigé quelques aléas dans leurs exemples). Apparemment, vous tracez plusieurs rectangles les uns sur les autres, ce qui annule la semi-transparence souhaitée. Donc, les seuls moyens de surmonter cela sont de coder en dur les coordonnées du rectangle dans un fichier df séparé, ou ...
ggplot() +
geom_density(data=mtcars, aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), alpha=0.2, fill="red")
... mais n'attribuez pas votre nom data.frame globalement à l'intrigue. À la place, utilisez-le uniquement dans le ou les calques de votre choix (dans cet exemple, geom_density
), et laissez les autres calques exempts de df! Ou, mieux encore, utilisez annotate
pour modifier votre tracé sous le df par défaut:
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
annotate("rect", xmin=100, xmax=200, ymin=0, ymax=Inf, alpha=0.2, fill="red")
Cette dernière méthode vous permet d'utiliser un seul nom data.frame pour l'intégralité du tracé. Vous n'avez donc pas à spécifier le même df pour chaque couche.
Les deux méthodes renvoient des parcelles identiques:
Une autre solution consiste à donner à geom_rect un objet de données de ligne unique pour garantir que seul un rectangle est dessiné:
ggplot(mtcars) +
geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) +
geom_rect(data=mtcars[1,], aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2)
ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2)) +
geom_rect(alpha=.2) +
geom_rect(data=data.frame(xmin=3, xmax=6, ymin=3, ymax=5),
aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax),
fill="green", alpha=.2)
Pour ceux qui tentaient de spécifier les valeurs de remplissage et les valeurs alpha dans geom_rect lors du traitement des facettes, j’avais besoin de spécifier une ligne dans le cadre de données correspondant à chaque facette pour que le rectangle apparaisse dans cette facette. Pour un tracé à trois facettes et deux rectangles s'étendant sur les 3 facettes:
plotpnts = ggplot(SHDates, aes(x=Order, y=NewMean))
Fig2 = plotpnts +
# Rectangles for time periods
geom_rect(data=SHDates[1,], xmin=0,ymin=500,xmax=39,ymax=1100, fill="red", alpha=0.4) +
geom_rect(data=SHDates[11,], xmin=0,ymin=500,xmax=39,ymax=1100, fill="red", alpha=0.4) +
geom_rect(data=SHDates[22,], xmin=0,ymin=500,xmax=39,ymax=1100, fill="red", alpha=0.4) +
geom_rect(data=SHDates[1,], xmin=0,ymin=1000,xmax=39,ymax=1400, fill="orange", alpha=0.4) +
geom_rect(data=SHDates[11,], xmin=0,ymin=1000,xmax=39,ymax=1400, fill="orange", alpha=0.4) +
geom_rect(data=SHDates[22,], xmin=0,ymin=1000,xmax=39,ymax=1400, fill="orange", alpha=0.4) +