Ułóż wiele działek za pomocą gridExtra

Spędziłem wiele godzin próbując dopasować 11 wykresów w jednym wykresie i zaaranżować je za pomocągridExtra ale zawiodłem nieszczęśliwie, więc zwracam się do ciebie z nadzieją, że możesz pomóc.

Mam 11 klasyfikacji diamentów (nazwij tosize1) i 11 innych klasyfikacji (size2) i chcę sprecyzować, w jaki sposób średnia cena dla każdego rosnącegosize1 i rośnieclarity (od 1 do 6) zmienia się poprzez zwiększeniesize2 diamentów i narysuj wszystkie 11 wykresów na tym samym wykresie. Próbowałem użyćgridExtra jak sugerowano w innych postach, ale legenda znajduje się daleko po prawej stronie i wszystkie wykresy są zgniecione po lewej stronie, czy możesz mi pomóc dowiedzieć się, jak „szerokości” legendygridExtra musi zostać określony? Nie mogę znaleźć żadnych dobrych wyjaśnień. Dziękuję bardzo za pomoc, naprawdę to doceniam ...

Próbowałem znaleźć dobry przykład, aby odtworzyć moją ramkę danych, ale również nie udało mi się. Mam nadzieję, że ta ramka danych pomoże zrozumieć, co próbuję zrobić, nie mogłem go uruchomić i być taki sam jak mój, a niektóre wykresy nie mają wystarczającej ilości danych, ale ważną częścią jest rozmieszczenie wykresów za pomocągridExtra (chociaż jeśli masz inne uwagi na temat innych części, daj mi znać):

library(ggplot2)
library(gridExtra)

df <- data.frame(price=matrix(sample(1:1000, 100, replace = TRUE), ncol = 1))

df$size1 = 1:nrow(df)
df$size1 = cut(df$size1, breaks=11)
df=df[sample(nrow(df)),]
df$size2 = 1:nrow(df)
df$size2 = cut(df$size2, breaks=11)
df=df[sample(nrow(df)),]
df$clarity = 1:nrow(df)
df$clarity = cut(df$clarity, breaks=6)

# Create one graph for each size1, plotting the median price vs. the size2 by clarity:
for (c in 1:length(table(df$size1))) {

  mydf = df[df$size1==names(table(df$size1))[c],]
  mydf = aggregate(mydf$price, by=list(mydf$size2, mydf$clarity),median);   
  names(mydf)[1] = 'size2'
  names(mydf)[2] = 'clarity'
  names(mydf)[3] = 'median_price'

  assign(paste("p", c, sep=""), qplot(data=mydf, x=as.numeric(mydf$size2), y=mydf$median_price, group=as.factor(mydf$clarity), geom="line", colour=as.factor(mydf$clarity), xlab = "number of samples", ylab = "median price", main = paste("region number is ",c, sep=''), plot.title=element_text(size=10)) + scale_colour_discrete(name = "clarity")  + theme_bw() + theme(axis.title.x=element_text(size = rel(0.8)), axis.title.y=element_text(size = rel(0.8)) , axis.text.x=element_text(size=8),axis.text.y=element_text(size=8) ))
  }

# Couldnt get some to work, so use:
p5=p4
p6=p4
p7=p4
p8=p4
p9=p4

# Use gridExtra to arrange the 11 plots:

g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)}

mylegend<-g_legend(p1)


grid.arrange(arrangeGrob(p1 + theme(legend.position="none"),
                     p2 + theme(legend.position="none"),
                     p3 + theme(legend.position="none"),
                     p4 + theme(legend.position="none"),
                     p5 + theme(legend.position="none"),
                     p6 + theme(legend.position="none"),
                     p7 + theme(legend.position="none"),
                     p8 + theme(legend.position="none"),
                     p9 + theme(legend.position="none"),
                     p10 + theme(legend.position="none"),
                     p11 + theme(legend.position="none"),
                     main ="Main title",
                     left = ""), mylegend, 
                    widths=unit.c(unit(1, "npc") - mylegend$width, mylegend$width), nrow=1)

questionAnswers(1)

yourAnswerToTheQuestion