मैं ggplots का 'असंतुलित' ग्रिड कैसे प्राप्त कर सकता हूं?


94

साथ grid.arrangeमैं कई व्यवस्था कर सकते हैं ggplotकी तरह कुछ का उपयोग करके एक बहु पैनल आंकड़ा प्राप्त करने के लिए एक ग्रिड में आंकड़े:

library(ggplot2)
library(grid)
library(gridExtra)

कुछ ggplot2 भूखंड उत्पन्न करें, फिर

plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)

मैं पूरे फर्स्ट कॉल में एक प्लॉट और दूसरे कॉलोनी में तीन प्लॉट के साथ 'असंतुलित' 2 कॉल लेआउट कैसे प्राप्त कर सकता हूं? मैंने 'ग्रिड-ऑफ-ग्रिड्स' दृष्टिकोण के साथ एक ग्रिड का उपयोग grid.arrangeकरने की कोशिश की plot5, जो दूसरे ग्रिड के खिलाफ एक ग्रिड (जैसे , ऊपर) की साजिश रच रहा था, लेकिन प्राप्त:

अर्रेंजग्रोब (..., as.table = as.table, क्लिप = क्लिप, मेन = मेन,: इनपुट) में त्रुटि होनी चाहिए!

अपडेट करें:

सलाह के लिए धन्यवाद। मैं इस पर गौर करेंगे viewportsऔर grid। इस बीच, @WWin के लिए धन्यवाद, layOut'wq' पैकेज में फंक्शन ने मेरे डेटा संकलन के लिए बहुत अच्छा काम किया Sweave: यहां छवि विवरण दर्ज करें

अपडेट 2:

arrangeGrobआदेश (के रूप में @baptiste ने सुझाव दिया) भी अच्छी तरह से काम करता है, और बहुत सहज ज्ञान युक्त लगता है - कम से कम यह दो कॉलम की चौड़ाई बदलने के लिए आसान था। यह भी `wq 'पैकेज की आवश्यकता नहीं के लाभ है।

उदाहरण के लिए यहाँ मेरी Sweave फ़ाइल का कोड है:

<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1), 
                    ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
    \begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}

जो निम्नलिखित उत्पादन का उत्पादन करता है: यहां छवि विवरण दर्ज करें

BTW, कोई भी मुझे बताता है कि '> NA' क्यों दिखाई देता है?


आपको खुद व्यूपोर्ट सेट करना पड़ सकता है - grid.arrangeपर्याप्त लचीला नहीं हो सकता है ("[r] ग्रिड व्यूपोर्ट" के लिए
स्टैकओवरफ्लो

2
@BenBolker ने आपको एक उपयोगी दिशा का उपयोग करके बताया है grid। हेडली की ggplot2 पुस्तक भी देखें, खंड 8.4.2।
अरी बी। फ्रीडमैन

1
@BenBolker grid.arrangeअपने साथी arrangeGrob(अनिवार्य रूप से वापस लौटते हुए gTree) का उपयोग करके नेस्टेड व्यूपोर्ट के साथ उपयोग किया जा सकता है , जैसा कि मैंने नीचे दिया है।
बपतिस्मा

1
कुछ भी नहीं (NULL) रिटर्न के plot5रूप में आपके अंतिम असाइनमेंट की आवश्यकता नहीं है grid.arrange। यदि आप परिणामी grob उपयोग को arrangeGrobफिर से सहेजना चाहते हैं (और grid.drawइसे प्रदर्शित करने के लिए)।
बपतिस्मा

जवाबों:


73

grid.arrangeडिवाइस पर सीधे खींचता है; यदि आप इसे अन्य ग्रिड ऑब्जेक्ट्स के साथ संयोजित करना चाहते हैं, जिनकी आपको आवश्यकता है arrangeGrob, जैसे

 p = rectGrob()
 grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1),
              ncol=2)

संपादित करें (07/2015): v> 2.0.0 के साथ आप layout_matrixतर्क का उपयोग कर सकते हैं ,

 grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))

6
क्या आप बता सकते हैं कि cbind(c(1,1,1), c(2,3,4))मैट्रिक्स आंकड़ों की व्यवस्था का वर्णन कैसे करता है ?
रॉन गीजमैन

5
@RonGejman यह आसान है अगर आप स्क्रीन पर 3x2 मैट्रिक्स प्रिंट करते हैं: पहला कॉलम सभी 1s है, यही वह जगह है जहां पहला प्लॉट रहता है, तीन पंक्तियों में फैले; दूसरे कॉलम में प्लॉट 2, 3, 4, प्रत्येक में एक पंक्ति होती है।
बपतिस्मा देने वाला

17

मैंने इसे ग्रिड के साथ लगाने की कोशिश की और मुझे लगा कि मेरे पास यह है, लेकिन असफल हो गया (हालाँकि अब नीचे दिए गए फ़ंक्शन का कोड देख रहा हूं, मैं देख सकता हूं कि मैं वास्तव में करीब था ... :-)

'Wq' पैकेज में एक layOutफंक्शन है जो इसे आपके लिए करेगा:

p1 <- qplot(mpg, wt, data=mtcars)
layOut(list(p1, 1:3, 1),   # takes three rows and the first column
        list(p1, 1, 2),    # next three are on separate rows
         list(p1, 2,2), 
          list(p1, 3,2))

यहां छवि विवरण दर्ज करें


वाह, यह एक उपयोगी कार्य है! मुझे लगता है कि कॉपी + पेस्ट आपको विफल हो सकता है, हालांकि; आप के लिए क्या मतलब था g1, g2सब होने के लिए, आदि p1?
जोरान

3
@ जोरान: मैंने किया। मुझे याद नहीं है कि "प्रोग्रामिंग के तीन गुणों" में से कौन सा आलस्य है, लेकिन मुझे पता है कि वहाँ कहीं है।
IRTFM

धन्यवाद! बहुत अच्छी तरह से काम किया। ऊपर देखो।
user441706

2

एक अन्य विकल्प patchworkथॉमस लिन पेडरसन द्वारा पैकेज है।

# install.packages("devtools")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)

कुछ भूखंड उत्पन्न करें।

p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + facet_grid(rows = vars(gear))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))

अब भूखंडों की व्यवस्था करें।

p1 + (p2 / p3 / p4)

यहां छवि विवरण दर्ज करें


1

इसमें मल्टीफंक्शनल पैकेज भी है जो उल्लेख के लायक है। इसका जवाब भी देखिए ।

library(ggplot2)
theme_set(theme_bw())

q1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
q2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
q3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
q4 <- ggplot(mtcars) + geom_bar(aes(carb))

library(magrittr)
library(multipanelfigure)

figure1 <- multi_panel_figure(columns = 2, rows = 3, panel_label_type = "upper-roman")

figure1 %<>%
  fill_panel(q1, column = 1, row = 1:3) %<>%
  fill_panel(q2, column = 2, row = 1) %<>%
  fill_panel(q3, column = 2, row = 2) %<>%
  fill_panel(q4, column = 2, row = 3)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
figure1

2018-07-16 को रेप्रेक्स पैकेज (v0.2.0.9000) द्वारा बनाया गया ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.