2015-06-01 11 views
12

मेरे पास ggplot2 ग्राफिक्स की एक श्रृंखला है जो लगातार क्षैतिज लेकिन लंबवत पहलुओं की भिन्न संख्या के साथ ग्राफिक्स है। मैं ग्राफिक्स को .pdf को लैंडस्केप ए 4 प्रारूप पर सहेजना चाहता हूं।कई बहु-पहलू ggplot2 ग्राफिक्स में समान पहलू आकार और तराजू कैसे प्राप्त करते हैं?

हालांकि, मुझे नहीं पता कि मैं पहलुओं के समान अनुपात कैसे प्राप्त कर सकता हूं। यदि मैं इसे मैन्युअल रूप से ट्विक करने का प्रयास करता हूं और विभिन्न प्रकार के लंबवत पहलुओं के लिए width और height बदलता हूं, तो स्केल प्लॉट्स के बीच भिन्न होते हैं, यानी, मुझे विभिन्न बिंदु आकार और रेखा चौड़ाई मिलती है।

संक्षेप में, मैं समान चरम (लंबवत) पहलुओं वाले प्लॉट्स के लिए समान पहलुओं के आकार और स्केल कैसे प्राप्त कर सकता हूं?

df <- expand.grid(a = 1:2, b = 1:5, x = 1:10) 
df$y <- df$x 
plot <- ggplot(data = df, mapping = aes(x = x, y = y)) + 
      geom_point() 
plot1 <- plot + facet_grid(facets = "a ~ b") 
plot2 <- plot + facet_grid(facets = ". ~ b") 

ggsave(filename = "./figures/plot1.pdf", plot = plot1, 
    height = 210, width = 297, units = "mm") 

ggsave(filename = "./figures/plot2.pdf", plot = plot2, 
    height = 210, width = 297, units = "mm") 

उत्तर

15

मैं इस कोड का उपयोग पूर्ण मान को पैनल आकार निर्धारित करने के लिए, हो सकता है यह यहाँ बहुत धन्यवाद आप में मदद करता है

set_panel_size <- function(p=NULL, g=ggplotGrob(p), file=NULL, 
          margin = unit(1,"mm"), 
          width=unit(4, "cm"), 
          height=unit(4, "cm")){ 

    panels <- grep("panel", g$layout$name) 
    panel_index_w<- unique(g$layout$l[panels]) 
    panel_index_h<- unique(g$layout$t[panels]) 
    nw <- length(panel_index_w) 
    nh <- length(panel_index_h) 

if(getRversion() < "3.3.0"){ 

    # the following conversion is necessary 
    # because there is no `[<-`.unit method 
    # so promoting to unit.list allows standard list indexing 
    g$widths <- grid:::unit.list(g$widths) 
    g$heights <- grid:::unit.list(g$heights) 

    g$widths[panel_index_w] <- rep(list(width), nw) 
    g$heights[panel_index_h] <- rep(list(height), nh) 

} else { 

    g$widths[panel_index_w] <- rep(width, nw) 
    g$heights[panel_index_h] <- rep(height, nh) 

} 

    if(!is.null(file)) 
    ggsave(file, g, 
      width = convertWidth(sum(g$widths) + margin, 
           unitTo = "in", valueOnly = TRUE), 
      height = convertHeight(sum(g$heights) + margin, 
            unitTo = "in", valueOnly = TRUE)) 

    invisible(g) 
} 

print.fixed <- function(x) grid.draw(x) 
+0

निश्चित रूप से मेरी समस्या हल,:

यहाँ एक उदाहरण है! – NoBackingDown

+1

यह फ़ंक्शन 'अंडा :: set_panel_size() 'में कॉपी किया गया है – baptiste

संबंधित मुद्दे