2012-09-21 28 views
13

मैं ग्रिड lpackage उपयोग कर रहा हूँ मेरी रेखांकन है कि मैं ggplot2 के साथ बनाया जगह:ggplot अलग कथा और साजिश

library(ggplot2) 
library(grid) 

Layout <- grid.layout(nrow = 4, ncol = 4, 
      widths = unit(1, "null"), 
      heights = unit(c(0.4, 0.8, 1.2, 1.2), c("null", "null", "null"))) 
grid.show.layout(Layout) 

plot1 = ggplot(diamonds, aes(clarity, fill = color)) + 
      geom_bar() + 
      facet_wrap(~cut, nrow = 1) 
print(plot1 + theme(legend.position = "none"), 
vp = viewport(layout.pos.row = 3, layout.pos.col = 1:4)) 

समस्या यह है कि मैं तीसरी पंक्ति पर साजिश (रखना चाहते है 3,1) - (3,4) और पौराणिक कथाओं को (4,4) स्थिति में रखें। दुर्भाग्य से, मैं वास्तव में केवल एक किंवदंती चर बनाने के लिए एक रास्ता नहीं मिल सकता है। मैंने ऑनलाइन खोज की और मुझे जो निकटतम मिला वह पुराने + opts(keep = "legend_box") का उपयोग कर रहा था लेकिन इसे हटा दिया गया है।

older solution

उत्तर

24

आप ggplot के grob ऑब्जेक्ट से पौराणिक कथा प्राप्त कर सकते हैं। फिर आप सब कुछ स्थिति के लिए grid.arrange फ़ंक्शन का उपयोग कर सकते हैं।

library(gridExtra) 
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]] 
    legend 
} 

legend <- g_legend(plot1) 

grid.arrange(legend, plot1+ theme(legend.position = 'none'), 
    ncol=2, nrow=1, widths=c(1/6,5/6)) 

वेब g_legend समारोह का उपयोग करने पर उदाहरण के बहुत सारे हैं।

HTH

+0

इसके लिए धन्यवाद। मैं अभी भी नए बदलावों के आसपास नहीं मिला है। –