আমি কীভাবে জিজিপ্লটসের একটি 'ভারসাম্যহীন' গ্রিড পেতে পারি?


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, clip = clip, main = main,: ইনপুট অবশ্যই গ্রুব হতে হবে!

হালনাগাদ:

পরামর্শের জন্য ধন্যবাদ. আমি দেখতে হবে viewportsএবং grid। ইতিমধ্যে @WWin কে ধন্যবাদ, layOutআমার Sweaveডকুমেন্টের সংকলনের চিত্রটির জন্য ' ডাব্লিউকিউ ' প্যাকেজের ফাংশনটি খুব ভালভাবে কাজ করেছে : এখানে চিত্র বর্ণনা লিখুন

আপডেট 2:

arrangeGrobকমান্ড (যেমন @baptiste দ্বারা প্রস্তাবিত) ও ভাল কাজ করে, ও খুব স্বজ্ঞাত বলে মনে হয় - অন্তত এটা দুই কলামের দ্বিতীয় প্রস্থ সহজ ছিল। `ডাব্লিউকিউ 'প্যাকেজটি না লাগানোরও সুবিধা রয়েছে benefit

যেমন আমার সোয়েভ ফাইলের কোডটি এখানে:

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

যা নিম্নলিখিত আউটপুট উত্পাদন করে: এখানে চিত্র বর্ণনা লিখুন

বিটিডাব্লু, কেউ আমাকে বলবেন কেন '> এনএ' প্রদর্শিত হবে?


আপনাকে grid.arrange
নিজেরাই

4
@ বেনবোলকার আপনাকে ব্যবহার করে একটি কার্যকর দিক নির্দেশ করেছেন grid। এছাড়াও হ্যাডলির ggplot2 বই, বিভাগ 8.4.2 দেখুন।
এরি বি ফ্রিডম্যান

4
@ বেনবোলকারকে grid.arrangeতার সহযোগী ব্যবহার করে নেস্টেড ভিউপোর্টগুলি ব্যবহার করা যেতে পারে arrangeGrob(মূলত একটি ফেরানো gTree), যেমনটি আমি নীচে দিয়েছি।
baptiste

4
কিছুই না (NULL) plot5হিসাবে আপনার চূড়ান্ত কার্যভার প্রয়োজন হয় grid.arrange। আপনি যদি ফলাফলটি ছাঁটাইটি 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> ২.০.০ সহ আপনি 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))ম্যাট্রিক্স কীভাবে পরিসংখ্যানগুলির বিন্যাসকে বর্ণনা করে?
রন গেজম্যান 14

5
@ রনজিমন আপনি যদি স্ক্রিনে 3x2 ম্যাট্রিক্সটি মুদ্রণ করেন তবে এটি সহজ: প্রথম কলামটি 1 টি, সেখানে প্রথম সারিতে তিনটি সারি বিস্তৃত; দ্বিতীয় কলামে 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?
19-18 এ জোড়ান

4
@ জোড়ান: আমি করেছি। "প্রোগ্রামিংয়ের তিনটি গুণ "গুলির মধ্যে কোনটি অলসতা আমি মনে করতে পারি না তবে আমি জানি যে এটি কোথাও আছে।
আইআরটিএফএম

ধন্যবাদ! খুব সুন্দরভাবে কাজ করেছেন। উপরে দেখুন.
ব্যবহারকারী 441706

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

ডিপেক্স প্যাকেজ (v0.2.0.9000) দ্বারা 2018-07-16-এ তৈরি হয়েছিল ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.