modifier - par exemple reproductible inclus ci-dessousR 'ggplot2' Organisation de légendes communes et uniques avec plusieurs objets de tracé (maillés).
J'utilise this function avec le paquet ggplot2 à Add a common Legend for combined ggplots qui fonctionne perfecty lorsque chaque parcelle a seulement 1 type de légende par exemple pour ...,color =, ...
.
Cependant, je suis en train d'organiser plusieurs parcelles qui partagent une légende commune, mais chacun a une légende supplémentaire unique par exemple:
ggplot(df1, aes(x=Site, y=RESULT, color=Position , shape=DETNAME)) +
geom_point(size=5) + ylab ("concentration (mg/L)") +
labs (shape = "Determinand")
qui produit:
Je 3x ces où la légende Position est partagée mais les légendes Determinand sont uniques.
Je veux savoir s'il y a un argument supplémentaire je peux passer à grid_arrange_shared_legend()
qui préservera les légendes Determinand (shape = DETNAME
)-à-dire les tracer au-dessus de chaque parcelle sur la grille en utilisant quelque chose comme legend.position = "top"
mais ayant une légende commune pour la position (color = position
)?
Je sais que je peux ajouter + guides(shape = FALSE)
à chaque objet de la parcelle, puis utiliser grid_arrange_shared_legend()
qui me donne la légende de position commune, mais je veux réaliser quelque chose comme ça, mais avec une légende Determinand unique pour chaque parcelle:
Ou quelqu'un peut-il indiquer quelle partie du code source de la fonction grid_arrange_shared_legend()
doit être modifiée pour effectuer cette opération?
modifier - par exemple reproductible
library (ggplot2)
library(gridExtra)
library (grid)
# two ggplot plot objects with multiple legends 1 common legend and 2 unique
p1<- ggplot(diamonds, aes(x=price, y= depth, color= clarity , shape= cut)) +
geom_point(size=5) + labs (shape = "unique legend", color = "common legend")
p2 <- ggplot(diamonds, aes(x=price, y= depth, color= clarity , shape= color)) +
geom_point(size=5) + labs (shape = "unique legend", color = "common legend")
# shared legend function
grid_arrange_shared_legend <- function(..., ncol = length(list(...)), nrow = 1, position = c("bottom", "right")) {
plots <- list(...)
position <- match.arg(position)
g <- ggplotGrob(plots[[1]] + theme(legend.position = position))$grobs
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
lheight <- sum(legend$height)
lwidth <- sum(legend$width)
gl <- lapply(plots, function(x) x + theme(legend.position="none"))
gl <- c(gl, ncol = ncol, nrow = nrow)
combined <- switch(position,
"bottom" = arrangeGrob(do.call(arrangeGrob, gl),
legend,
ncol = 1,
heights = unit.c(unit(1, "npc") - lheight, lheight)),
"right" = arrangeGrob(do.call(arrangeGrob, gl),
legend,
ncol = 2,
widths = unit.c(unit(1, "npc") - lwidth, lwidth)))
grid.newpage()
grid.draw(combined)
# return gtable invisibly
invisible(combined)
}
grid_arrange_shared_legend (p1,p2)
Utilisation de la fonction grid_arrange_shared_legend()
signifie ici que la légende unique est correcte seulement pour l'une des parcelles sur la grille
Question Comment préserver (extraire?) Les légendes uniques et les tracer au-dessus de chaque intrigue sur la grille, tout en gardant la légende commune t le fond?