2012-12-04 9 views
6

मैं ggplot2 द्वारा उत्पन्न प्लॉट की व्यवस्था कर रहा हूं। मुझे पौराणिक कथाओं को प्रदर्शित करने के लिए भूखंडों और grid.draw मुद्रित करने के लिए प्रिंट का उपयोग करना होगा।grid.draw की स्थिति को कैसे बदलें

नमूना कोड:

p0 <- ggplot(data = iris, geom = 'blank', 
     aes(y = Petal.Width, x = Petal.Length, color = Species)) + geom_point() + 
     theme(axis.title.x = element_blank(), 
      axis.title.y = element_blank(), 
      legend.position = "none") 

p1 <- ggplot(data = iris, geom = 'blank', 
     aes(y = Petal.Length, x = Petal.Width, color = Species)) + geom_point() + 
     theme(axis.title.x = element_blank(), 
      axis.title.y = element_blank(), 
      legend.position = "none") 

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) 
} 

p <- ggplot(data = iris, geom = 'blank', 
     aes(y = Petal.Width, x = Petal.Length, color = Species)) + geom_point() 


grid.newpage() 
pushViewport(viewport(layout = grid.layout(2, 4))) 
print(p0,vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) 
print(p0,vp = viewport(layout.pos.row = 1, layout.pos.col = 2:3)) 
print(p1,vp = viewport(layout.pos.row = 2, layout.pos.col = 2:3)) 
grid.text("This is x label",gp=gpar(fontsize = 14), vjust = 11, 
      vp = viewport(layout.pos.row = 2, layout.pos.col = 2)) 
grid.text("This is y label",gp=gpar(fontsize = 14), vjust = -11, rot = 90, 
      ![enter image description here][1]vp = viewport(layout.pos.row = 2, layout.pos.col = 2)) 

grid.draw(g_legend(p)) 

मैं चौथे स्तंभ पर कथा डाल करना चाहते हैं। मैं यह कैसे कर सकता हूं? धन्यवाद।

+3

मैं वापस लुढ़का है आपका प्रश्न, चूंकि आपका अंतिम संपादन एक नया प्रश्न पूछता है। – Andrie

उत्तर

9

enter image description here gridExtra

  library(gridExtra) 
     grid.arrange(p0 , p1, g_legend(p), ncol=3, 
     heights=c(10, 1),widths =c(1,2,1) ,as.table =TRUE) 
+0

धन्यवाद। पुशव्यूपॉइंट पर चिपकने के लिए दूर है? मैं कई भूखंडों की व्यवस्था कर रहा हूं और मुझे प्रत्येक के लिए लंबाई और स्थिति निर्धारित करने की आवश्यकता है, और साजिश में पाठ जोड़ने के लिए grid.text का उपयोग करने की भी आवश्यकता है। – Autumn

+0

आप इस उत्तर के साथ ठीक नहीं हैं? यदि मामला पहले से मान्य है और फिर एक नया प्रश्न पूछना बेहतर है जहां आप विस्तार से अनुरोध करते हैं (कई भूखंड, gtext, ..) – agstudy

+0

मैंने नमूना कोड और साजिश संपादित की है। क्या आप इसके साथ मेरी मदद कर सकते हैं? – Autumn

2

का उपयोग कर आप मैन्युअल रूप से x और TableGrob वस्तु में y निर्देशांक बदल सकते हैं। उदाहरण के लिए, आप साजिश के केंद्र में कथा रखने के लिए निम्न कर सकता है: जब आप grid.draw (पैर) फोन

leg <- g_legend(p) 
leg$vp$x <- unit(.5, 'npc') 
leg$vp$y <- unit(.5, 'npc') 

, यह केंद्र में तैनात किया जाएगा। जहां चाहें इसे रखने के लिए विभिन्न मानों का उपयोग करें।

+1

मुझे लगता है कि आप का मतलब: पैर $ उपाध्यक्ष $ x <- इकाई (.5, 'एनपीसी') पैर $ उपाध्यक्ष $ y <- इकाई (.5, 'एनपीसी') और उसके बाद के रूप में आप ने कहा, grid.draw (पैर) – maia

2

ग्रिड में, विचार करने वाला व्यूपोर्ट जहां आकर्षित करने के लिए चाहते हैं पुश करने के लिए,

pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 4)) 
grid.draw(g_legend(p)) 

होगा या वैकल्पिक रूप से कथा Grob व्यूपोर्ट निर्दिष्ट करते हैं,

leg = g_legend(p) 
leg$vp = viewport(layout.pos.row = 2, layout.pos.col = 4) 
grid.draw(leg) 
संबंधित मुद्दे