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


92
library(ggplot2)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
# In my real example,a plot function will fit a ggplot to a list of datasets 
#and return a list of ggplots like the example above.

আমি ব্যবহার প্লট ব্যবস্থা করতে চাই grid.arrange()মধ্যে gridExtra

প্লটের সংখ্যা plistপরিবর্তনশীল হলে আমি কীভাবে এটি করব ?

এইটা কাজ করে: grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])

তবে আমার আরও সাধারণ সমাধান দরকার। চিন্তা?

উত্তর:


139

এটি সম্পর্কে:

library(gridExtra)
n <- length(plist)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(plist, ncol=nCol))

এখানে চিত্র বর্ণনা লিখুন


এটি দুর্দান্ত, ফাংশনটি NULL অবজেক্টগুলি পরিচালনা করতে পারে তা বাদে এটি দুর্দান্ত।
রোমান Luštrik

জোশ। আমি তোমাকে ভালোবাসি. এখন পর্যন্ত এটিতে 2 ঘন্টা ব্যয় করেছে। এটি কেন কাজ করে না তা বোঝানোর জন্য যত্ন নেবেন: grid.arrange(plist[[1:length(plist)]], ncol = nCol))আমি এর মতো একটি ত্রুটি পেয়েছি: Error in hl.plots[[1:12]] : no such index at level 3ধন্যবাদ!
Anto

4
@Anto কয়েকটি জিনিস যে কোড সঙ্গে ভুল হবে বলে মনে হচ্ছে, কিন্তু এক আপনি প্রদর্শিত ত্রুটি দান সম্ভবত ত্রুটি একই সাজানোর দ্বারা ঘটিত হয় যেমন এখানে দেখানো হয়: x <- list(1,2); x[[3:1]]। আরও বিস্তৃতভাবে, আপনার সাবসেটিংয়ের plist[...]চেয়ে কিছু ব্যবহার plist[[...]]করুন। এবং তারপরে ব্যবহার করুন do.call(), যা আমাদের ব্যবহার করতে হবে কারণ grid.arrange()এটির প্রথম যুক্তি হিসাবে কোনও তালিকা গ্রহণের জন্য সেট আপ করা হয়নি। চিয়ার্স এবং শুভেচ্ছা!
জোশ ওব্রায়েন

31

আপনি ব্যবহার করতে পারেন grid.arrange()এবং arrangeGrob()যতদিন তালিকা সঙ্গে হিসাবে আপনি ব্যবহার তালিকা নির্দিষ্ট grobs =প্রতিটি ফাংশনে যুক্তি। যেমন আপনি যে উদাহরণ দিয়েছেন:

library(ggplot2)
library(gridExtra)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)

grid.arrange(grobs = plist, ncol = 2) ## display plot
ggsave(file = OutFileName, arrangeGrob(grobs = plist, ncol = 2))  ## save plot

4
এই উত্তরটি খুঁজে পেতে আমাকে অনেক দীর্ঘ সময় নিয়েছে ... ধন্যবাদ! এটি সহজতম।
ম্যাট এল।

16

সম্পূর্ণতার জন্য (এবং এই পুরানো হিসাবে ইতিমধ্যে উত্তর দেওয়া প্রশ্নটি সম্প্রতি পুনরুদ্ধারিত হয়েছে ) আমি cowplotপ্যাকেজটি ব্যবহার করে একটি সমাধান যুক্ত করতে চাই :

cowplot::plot_grid(plotlist = plist, ncol = 2)

এখানে চিত্র বর্ণনা লিখুন


এই কোডটি ব্যবহার করে প্লটের একটি তালিকা কেন এই ত্রুটিটি ফিরে আসে তার কোনও ধারণা: Error in ggplot_to_gtable(x) : Argument needs to be of class "ggplot" or "gtable"
geog_newbie

প্লটগুলি কীভাবে উত্পন্ন হয়েছিল? ggplot2প্যাকেজ বা বেস গ্রাফিক্স ব্যবহার করছেন ?
উয়েউ

ggplot2grid.arrangeপ্রায় আমার জন্য কাজ করেছে - কিন্তু, আমার প্লটগুলির তালিকা জনবহুল হচ্ছে না তা দেখা যাচ্ছে। আমি এই প্রশ্নটি একটি প্রশ্ন হিসাবে পোস্ট করেছি: stackoverflow.com/questions/43216262/… । সুতরাং, আমি ভাবছি যে এটি যদি কপোলের জন্যও সমস্যা হতে পারে
জিওগ_নিউবি

10

আমি জানি যে প্রশ্নটি গ্রিডেক্সট্রা প্যাকেজটি ব্যবহার করে বিশেষত উল্লেখ করেছে , তবে প্যাচওয়ার্ক প্যাকেজ wrap_plotsথেকে ফাংশনটি ভেরিয়েবল দৈর্ঘ্যের তালিকাকে পরিচালনা করার দুর্দান্ত উপায়:

library(ggplot2)
# devtools::install_github("thomasp85/patchwork")
library(patchwork)

df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)

wrap_plots(plist)

এখানে চিত্র বর্ণনা লিখুন

এ সম্পর্কে একটি দরকারী বিষয় হ'ল আপনাকে কয়টি কলামের প্রয়োজন তা নির্দিষ্ট করার দরকার নেই এবং এটি কলাম এবং সারিগুলির সংখ্যা সমান রাখার লক্ষ্য রাখে। উদাহরণ স্বরূপ:

plist <- list(p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1)
wrap_plots(plist) # produces a 4 col x 4 row plot

প্যাচওয়ার্ক প্যাকেজ সম্পর্কে আরও এখানে সন্ধান করুন


আপনি এখানে যে প্যাকেজটি উল্লেখ করেছেন তা আমি ইনস্টল করতে পারি না
বেক্সেক্স

আপনি কি উপরে মন্তব্য করেছেন যে ইনস্টলেশন লাইন চালানোর চেষ্টা করেছেন devtools::install_github("thomasp85/patchwork")?
মাইকেল হার্পার

আপনাকে ধন্যবাদ, আমি না। আমি কেবল আরস্টুডিও থেকে ইনস্টলটি ব্যবহার করার চেষ্টা করেছি।
বাক্সেক্স

4
প্যাকেজটি এখনও সিআরএএন-তে উপলব্ধ নেই, সুতরাং আপনাকে এটি গিটহাবের মাধ্যমে ইনস্টল করতে হবে। আশা করি এটি একটি দুর্দান্ত প্যাকেজ হওয়ায় এটি বেশি দিন ধরে চলবে না!
মাইকেল হার্পার

1

এক পৃষ্ঠায় সমস্ত প্লট ফিট করার জন্য আপনি এই জাতীয় কলাম এবং সারি সংখ্যা গণনা করতে পারেন:

x = length(plots)

cols = round(sqrt(x),0)
rows = ceiling(x/cols)

যেহেতু বেশিরভাগ একাধিক প্লট ফাংশনগুলির আর্গুমেন্ট হিসাবে এনসিএল এবং ন্রো থাকে আপনি কেবল এগুলিকে সেখানে রাখতে পারেন। আমি জিজিপুবার থেকে গ্যারেঞ্জ পছন্দ করি।

ggarrange(plotlist = plots, ncol=cols, nrow = rows)

এটি কলামগুলির চেয়ে বেশি সারি পছন্দ করে তাই বিপরীতে চাইলে বিপরীত। অর্থাত্ pl টি প্লটের জন্য এটি 3 টি সারি এবং 2 টি কলাম দেয় অন্যভাবে নয়।

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