2014-07-12 10 views
10

के बीच ggplot2 में एक ही आकार रखें मैं दो अलग भूखंडों चाहते हैं। मैं उन्हें एक बीमर प्रस्तुति के विभिन्न फ्रेम में उपयोग कर रहा हूँ और मैं अन्य (अंततः नीचे दिए गए उदाहरण में) करने के लिए एक लाइन जोड़ देगा। इस प्रकार मैं प्रस्तुति अगली स्लाइड पर एक स्लाइड से ("कूद"?) "छोड़" करने के लिए नहीं करना चाहती। मैं यह देखना चाहता हूं कि लाइन स्वाभाविक रूप से जोड़ा जा रहा है। नीचे दिया गया कोड मुझे विश्वास दिखाता है। यह सूक्ष्म है, लेकिन नहीं कैसे दूसरे भूखंड की साजिश क्षेत्र पहले साजिश के तुलना में थोड़ा बड़ा है। यह वाई अक्ष लेबल के कारण होता है।सब साजिश घटकों दो भूखंडों

library(ggplot2) 

dfr1 <- data.frame(
    time = 1:10, 
    value = runif(10) 
) 

dfr2 <- data.frame(
    time = 1:10, 
    value = runif(10, 1000, 1001) 
) 

p1 <- ggplot(dfr1, aes(time, value)) + geom_line() + scale_y_continuous(breaks = NULL) + scale_x_continuous(breaks = NULL) + ylab(expression(hat(z)==hat(gamma)[1]*time+hat(gamma)[4]*time^2)) 
print(p1) 
dev.new() 
p2 <- ggplot(dfr2, aes(time, value)) + geom_line() + scale_y_continuous(breaks = NULL) + scale_x_continuous(breaks = NULL) + ylab(".") 
print(p2) 

मैं ऐसे मैन्युअल अक्ष लेबल के आकार की स्थापना या x- अक्ष पर रिक्त स्थान को जोड़ने के रूप में एक hackish समाधान नहीं करना पसंद करेंगे (नीचे एक संदर्भ देखें), क्योंकि मैं कई सेटिंग्स में इस तकनीक का उपयोग करेगा और लेबल किसी भी समय (मैं reproducibility चाहते तो एक लचीला समाधान चाहते हैं) पर बदल सकते हैं।

मैं एक बहुत की खोज कर रहा हूँ और निम्नलिखित पाया है:

Specifying ggplot2 panel width

How can I make consistent-width plots in ggplot (with legends)?

https://groups.google.com/forum/#!topic/ggplot2/2MNoYtX8EEY

How can I add variable size y-axis labels in R with ggplot2 without changing the plot width?

वे मेरे लिए काम नहीं करते, मुख्य रूप से मैं क्योंकि अलग भूखंडों की आवश्यकता है, इसलिए यह संरेखित करने की बात नहीं है उपर्युक्त समाधानों में से कुछ में उन्हें एक संयुक्त साजिश पर व्यावहारिक रूप से।

उत्तर

8

प्रयास नहीं किया है, लेकिन यह काम हो सकता है,

gl <- lapply(list(p1,p2), ggplotGrob) 
library(grid) 
widths <- do.call(unit.pmax, lapply(gl, "[[", "widths")) 
heights <- do.call(unit.pmax, lapply(gl, "[[", "heights")) 
lg <- lapply(gl, function(g) {g$widths <- widths; g$heights <- heights; g}) 
grid.newpage() 
grid.draw(lg[[1]]) 
grid.newpage() 
grid.draw(lg[[2]]) 
+0

यह वास्तव में काम करता है। मैं बहुत उत्सुक हूँ। आपने खुद कोशिश क्यों नहीं की? मुझे लगता है कि समय आर में पेस्ट करने के लिए 5 सेकंड है लेकिन हो सकता है कि आपके पास आर तक कोई पहुंच न हो। आप परीक्षण के बिना स्मृति से ऐसा करने में सक्षम थे? किसी भी मामले में, आपके रचनात्मक समाधान के लिए धन्यवाद। –

2

p2 के लिए इस का उपयोग कर के बारे में कैसे:

p2 <- ggplot(dfr2, aes(time, value)) + geom_line() + 
    scale_y_continuous(breaks = NULL) + 
    scale_x_continuous(breaks = NULL) + 
    ylab(expression(hat(z)==hat(gamma)[1]*time+hat(gamma)[4]*time^2)) + 
    theme(axis.title.y=element_text(color=NA)) 

यह p1 के रूप में एक ही लेबल है, लेकिन तो यह प्रदर्शित नहीं करता है रंग एनए है। आप color="white" का भी उपयोग कर सकते हैं।

+0

यह बहुत अच्छा विचार है। धन्यवाद। हालांकि मुझे पी 2 पर एक वाई लेबल चाहिए। मेरे उदाहरण में मेरे पास 'ylab ("।") 'है। –

+0

मैंने यहां https://groups.google.com/forum/#!topic/ggplot2/s5Euy1orwLY पर प्रतिक्रियाओं को अनुकूलित करने का प्रयास किया है लेकिन अनुकूलित करने में विफल रहे हैं। –

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