ggplot2: Mehrere Diagramme in einer einzigen Zeile mit einer einzigen Legende

Ich möchte eine kombinierte Handlung von zwei Handlungen + ihrer Legende wie folgt:

library(ggplot2) 
library(grid)
library(gridExtra)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]    
p1 <- qplot(price, carat, data=dsamp, colour=clarity)
p2 <- qplot(price, depth, data=dsamp, colour=clarity)
g <- ggplotGrob(p1 + theme(legend.position="bottom"))$grobs
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
grid.arrange(arrangeGrob(p1+theme(legend.position="right"),p2+theme(legend.position="none"),legend,ncol=3,widths=c(3/7,3/7,1/7)))

Ich möchte jedoch nicht die Breite der Zeichnungen und Legenden erraten (und @ angebncol) aber habe es aus @ extrahiep1 undp2 wie hier gezeigt.

So würde ich wohl so etwas brauchen (angepasster Code aus dem Link):

grid_arrange_shared_legend_row <- function(...) {
  plots <- list(...)
  g <- ggplotGrob(plots[[1]] + theme(legend.position="right"))$grobs
  legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
  lwidth <- sum(legend$width)
  grid.arrange(
    do.call(arrangeGrob, lapply(plots, function(x)
      x + theme(legend.position="none"))),
    legend,
    ncol = length(plots)+1,
    widths = unit.c(rep(unit(1, "npc") - lwidth, length(plots)), lwidth))
}
grid_arrange_shared_legend_row(p1, p2)

aber das ist nicht die Anordnung der beiden Diagramme in einer Zeile, sondern in einer Spalte:

Diese Frage ist ähnlichu diesem hi aber anders, ich frage auch nach den angepassten Breiten. Ich verwende Code-Auszüge sowohl aus dieser Frage + Antwort als auch aus dem Github.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage