Ggplot2 সহ পাশাপাশি প্লটগুলি


339

আমি ব্যবহার করে পাশাপাশি দুটি প্লট রাখতে চাই ggplot2 প্যাকেজটি , যার সমতুল্য কাজ করুন par(mfrow=c(1,2))

উদাহরণস্বরূপ, আমি নীচের দুটি প্লট একই স্কেলটির পাশাপাশি পাশাপাশি থাকতে চাই।

x <- rnorm(100)
eps <- rnorm(100,0,.2)
qplot(x,3*x+eps)
qplot(x,2*x+eps)

আমার কি তাদের একই ডেটা ফ্রেমে রাখা দরকার?

qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()

আমি মনে করি আপনি জালি দিয়ে এটি করতে সক্ষম হবেন। Ggplot2 একটি কঠিন প্রয়োজন?
জেডি লং

8
না। তবে আমি ইতিমধ্যে কপিপ্লটগুলি টুইট করার সময় রেখেছি যাতে এটি আমার পছন্দ মতোই ছিল। :-) এবং আমি জিজিপ্লট দিয়ে চারপাশে খেলার চেষ্টা করছি।
ক্রিস্টোফার ডুবুইস

1
পরীক্ষা করে দেখুন stackoverflow.com/questions/31798162/...
Boern

1
একটি সুন্দর ওভারভিউয়ের জন্য, ডিমের প্যাকেজটির জন্য চিত্রটি দেখুন : একটি পৃষ্ঠায় একাধিক প্লট স্থাপন
হেনরিক

উত্তর:


505

পাশাপাশি কোনও ggplots (বা গ্রিডে এন প্লট)

ফাংশন grid.arrange()মধ্যে gridExtraপ্যাকেজ একাধিক প্লট একত্রিত করা হবে; এভাবে আপনি দু'জনকে পাশাপাশি রেখেছেন

require(gridExtra)
plot1 <- qplot(1)
plot2 <- qplot(1)
grid.arrange(plot1, plot2, ncol=2)

যখন দুটি প্লট একই ডেটার ভিত্তিতে নয়, উদাহরণস্বরূপ যদি আপনি পুনরায় আকার () ব্যবহার না করেই বিভিন্ন ভেরিয়েবল প্লট করতে চান তবে এটি কার্যকর।

এটি আউটপুটটিকে পার্শ্ব প্রতিক্রিয়া হিসাবে প্লট করবে। একটি ফাইলে পার্শ্ব প্রতিক্রিয়া মুদ্রণ করতে, (যেমন একটি ডিভাইস ড্রাইভার উল্লেখ pdf, png, ইত্যাদি), যেমন

pdf("foo.pdf")
grid.arrange(plot1, plot2)
dev.off()

বা, এর arrangeGrob()সাথে মিলিয়ে ব্যবহার করুন ggsave(),

ggsave("foo.pdf", arrangeGrob(plot1, plot2))

এটি ব্যবহার করে দুটি স্বতন্ত্র প্লট তৈরি করার সমতুল্য par(mfrow = c(1,2))। এটি কেবল ডেটা সাজানোর সময় সাশ্রয় করে না, যখন আপনি দুটি ভিন্ন ভিন্ন প্লট চান তখন এটি প্রয়োজনীয়।


পরিশিষ্ট: ফেসবুক ব্যবহার করা

বিভিন্ন গ্রুপের জন্য একই রকম প্লট তৈরির জন্য দিকগুলি সহায়ক। নীচে অনেক উত্তরে এটি নীচে নির্দেশিত হয়েছে, তবে আমি উপরোক্ত প্লটগুলির সমতুল্য উদাহরণ সহ এই পদ্ধতিকে হাইলাইট করতে চাই।

mydata <- data.frame(myGroup = c('a', 'b'), myX = c(1,1))

qplot(data = mydata, 
    x = myX, 
    facets = ~myGroup)

ggplot(data = mydata) + 
    geom_bar(aes(myX)) + 
    facet_wrap(~myGroup)

হালনাগাদ

এর মধ্যে plot_gridফাংশনটি cowplotবিকল্প হিসাবে চেক আউট মূল্যবান grid.arrange। দেখুন উত্তর নিচে @ ক্লজ-Wilke দ্বারা এই চিত্র একটি সমতুল্য পদ্ধতির জন্য; তবে ফাংশনটি এই ভিগনেটের উপর ভিত্তি করে প্লটের অবস্থান এবং আকারের উপর সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয় ।


2
আমি যখন জিপিপ্লাট অবজেক্ট ব্যবহার করে আপনার কোডটি চালিয়েছি, তখন সাইডবাইসাইডপ্লট শূন্য। আপনি যদি কোনও ফাইলে আউটপুট সংরক্ষণ করতে চান তবে গ্রিডআরঞ্জ ব্যবহার করুন। দেখুন stackoverflow.com/questions/17059099/...
জিম

@ জিম এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমি আমার উত্তর সংশোধন করেছি। যদি কোন প্রশ্ন থেকে যায় তবে আমাকে জানান।
ডেভিড লেবাউর

1
গ্রিড.আরঞ্জ এখন কি চিত্রিত হয়েছে?
এটিকাস 29

?grid.arrangeআমাকে ভাবায় যে এই ফাংশনটিকে এখন অ্যারেঞ্জগ্রোব বলা হয়। আমি যা করতে চাইছিলাম তা করতে পেরেছিলাম a <- arrangeGrob(p1, p2)এবং তারপরেও print(a)
ব্লেকওফট

@ ব্লাকওফট আপনি উদাহরণগুলি দেখেছেন? grid.arrangeএখনও একটি বৈধ, অবহিত ফাংশন। আপনি কি ফাংশনটি ব্যবহার করার চেষ্টা করেছিলেন? কি ঘটবে, যদি আপনি প্রত্যাশা না করেন।
ডেভিড লেবাউর 4

159

ভিত্তিক সমাধানগুলির একটি নেতিবাচক দিক grid.arrangeহ'ল বেশিরভাগ জার্নালের যেমন প্রয়োজন হয় তেমন তারা প্লটগুলিকে অক্ষরের (এ, বি, ইত্যাদি) লেবেল করা কঠিন করে তোলে।

আমি এই (এবং কয়েকটি অন্যান্য) সমস্যাগুলি সমাধান করার জন্য কাউপ্লট প্যাকেজটি লিখেছি , বিশেষত plot_grid():

library(cowplot)

iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot() + theme_bw()

iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
  geom_density(alpha = 0.7) + theme_bw() +
  theme(legend.position = c(0.8, 0.8))

plot_grid(iris1, iris2, labels = "AUTO")

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

যে বস্তুটি plot_grid()প্রত্যাবর্তন করে তা হ'ল অন্য ggplot2 অবজেক্ট এবং আপনি ggsave()যথারীতি এটি সংরক্ষণ করতে পারেন :

p <- plot_grid(iris1, iris2, labels = "AUTO")
ggsave("plot.pdf", p)

বিকল্পভাবে, আপনি কাউপ্লট ফাংশনটি ব্যবহার করতে পারেন save_plot(), ggsave()এটি চারপাশে একটি পাতলা মোড়ক যা মিলিত প্লটের সঠিক মাত্রা পাওয়া সহজ করে তোলে, যেমন:

p <- plot_grid(iris1, iris2, labels = "AUTO")
save_plot("plot.pdf", p, ncol = 2)

( ncol = 2যুক্তিটি বলে save_plot()যে এখানে দুটি প্লট পাশাপাশি রয়েছে এবং save_plot()সেভ করা চিত্রটি দ্বিগুণ প্রশস্ত করে তোলে))

গ্রিডে প্লটগুলি কীভাবে সাজানো যায় তার আরও গভীর-বিবরণের জন্য এই চিত্রটি দেখুন। ভাগ করে নেওয়া কিংবদন্তি দিয়ে কীভাবে প্লট তৈরি করা যায় তা ব্যাখ্যা করার জন্য একটি ভাইনেটও রয়েছে।

বিভ্রান্তির একটি ঘন ঘন বিষয়টি হ'ল কাফ্লট প্যাকেজটি ডিফল্ট ggplot2 থিম পরিবর্তন করে। প্যাকেজটি সেভাবে আচরণ করে কারণ এটি মূলত অভ্যন্তরীণ ল্যাব ব্যবহারের জন্য লেখা হয়েছিল এবং আমরা কখনই ডিফল্ট থিমটি ব্যবহার করি না। যদি এটি সমস্যার কারণ হয়ে থাকে তবে আপনি চারপাশে কাজ করার জন্য নিম্নলিখিত তিনটি পদ্ধতির একটি ব্যবহার করতে পারেন:

1. প্রতিটি প্লটের জন্য থিমটি ম্যানুয়ালি সেট করুন। আমি মনে করি যে প্রতিটি প্লটের জন্য সর্বদা একটি নির্দিষ্ট থিম নির্দিষ্ট করা ভাল অনুশীলন+ theme_bw() উপরের উদাহরণটি দিয়েছিলাম। আপনি যদি কোনও নির্দিষ্ট থিম নির্দিষ্ট করেন তবে ডিফল্ট থিমটি কিছু যায় আসে না।

2. ডিফল্ট থিমটি আবার ggplot2 ডিফল্টে ফিরিয়ে দিন। আপনি এক লাইনের কোড দিয়ে এটি করতে পারেন:

theme_set(theme_gray())

৩. প্যাকেজটি সংযুক্ত না করে কাউফ্লট ফাংশনগুলিতে কল করুন। এছাড়াও আপনি প্রিপেন্ডিং করে কল library(cowplot)বা require(cowplot)তার পরিবর্তে কাউপ্লট ফাংশনগুলিতে কল করতে পারবেন না cowplot::। উদাহরণস্বরূপ, ggplot2 ডিফল্ট থিম ব্যবহার করে উপরের উদাহরণটি হয়ে উঠবে:

## Commented out, we don't call this
# library(cowplot)

iris1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot()

iris2 <- ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
  geom_density(alpha = 0.7) +
  theme(legend.position = c(0.8, 0.8))

cowplot::plot_grid(iris1, iris2, labels = "AUTO")

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

আপডেট:

  • কাউপ্লট ১.০ হিসাবে, ডিফল্ট ggplot2 থিমটি আর পরিবর্তন করা হয় না।
  • Ggplot2 3.0.0 হিসাবে, প্লটগুলি সরাসরি লেবেলযুক্ত হতে পারে, উদাহরণস্বরূপ এখানে দেখুন।

আউটপুটে কাউপলট উভয় প্লটের ব্যাকগ্রাউন্ড থিম সরিয়ে দিচ্ছে? কোন বিকল্প আছে?
VAR121

@ VAR121 হ্যাঁ, এটি কোডের এক লাইন। প্রবর্তক ভিনগেটের
ক্লজ উইলকে

এই প্যাকেজটির সাথে সমস্ত প্লটের জন্য একই y স্কেল পাওয়া কি সম্ভব?
হারমান টুথ্রোট

আপনাকে ম্যাচের জন্য y স্কেল ম্যানুয়ালি সেট করতে হবে। বা মুখোমুখি বিবেচনা করুন।
ক্লজ উইল্কে

আপনি গ্রিড.আরঞ্জ () ব্যবহার করার আগে প্রতিটি প্লটের জন্য একটি জিগিটিটল () সেট করতে পারেন?
সানোসাপিয়েন

49

আপনি উইনস্টন চ্যাংয়ের আর কুকবুকmultiplot থেকে নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন

multiplot(plot1, plot2, cols=2)

multiplot <- function(..., plotlist=NULL, cols) {
    require(grid)

    # Make a list from the ... arguments and plotlist
    plots <- c(list(...), plotlist)

    numPlots = length(plots)

    # Make the panel
    plotCols = cols                          # Number of columns of plots
    plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols

    # Set up the page
    grid.newpage()
    pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))
    vplayout <- function(x, y)
        viewport(layout.pos.row = x, layout.pos.col = y)

    # Make each plot, in the correct location
    for (i in 1:numPlots) {
        curRow = ceiling(i/plotCols)
        curCol = (i-1) %% plotCols + 1
        print(plots[[i]], vp = vplayout(curRow, curCol ))
    }

}

24

প্যাচওয়ার্ক প্যাকেজটি ব্যবহার করে আপনি কেবল +অপারেটরটি ব্যবহার করতে পারেন :

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))


p1 + p2

জোড়াতালি


কেবল সম্পূর্ণতার জন্য, প্যাচওয়ার্ক এখন সিআরএএন-তেও রয়েছে। আশা করি আপনি আমার ছোট সম্পাদনায় খুশি
Tjebo

18

হ্যাঁ, আপনার ডেটা যথাযথভাবে সাজানো দরকার মেথিংকস। একটি উপায় হ'ল:

X <- data.frame(x=rep(x,2),
                y=c(3*x+eps, 2*x+eps),
                case=rep(c("first","second"), each=100))

qplot(x, y, data=X, facets = . ~ case) + geom_smooth()

আমি নিশ্চিত যে প্লাইয়ার বা পুনঃসারণের ক্ষেত্রে আরও ভাল কৌশল আছে - হ্যাডলির এই সমস্ত শক্তিশালী প্যাকেজগুলির গতি বাড়ানোর জন্য আমি এখনও সত্যিই এগিয়ে নেই।


16

পুনরায় আকার প্যাকেজটি ব্যবহার করে আপনি এর মতো কিছু করতে পারেন।

library(ggplot2)
wide <- data.frame(x = rnorm(100), eps = rnorm(100, 0, .2))
wide$first <- with(wide, 3 * x + eps)
wide$second <- with(wide, 2 * x + eps)
long <- melt(wide, id.vars = c("x", "eps"))
ggplot(long, aes(x = x, y = value)) + geom_smooth() + geom_point() + facet_grid(.~ variable)

12

এখানে মাল্টিপেনসিલ્ফিউগার প্যাকেজ রয়েছে যা উল্লেখ করার মতো। এই উত্তরটি দেখুন

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 = 2, panel_label_type = "none")
# show the layout
figure1

figure1 %<>%
  fill_panel(q1, column = 1, row = 1) %<>%
  fill_panel(q2, column = 2, row = 1) %<>%
  fill_panel(q3, column = 1, row = 2) %<>%
  fill_panel(q4, column = 2, row = 2)
figure1

# complex layout
figure2 <- multi_panel_figure(columns = 3, rows = 3, panel_label_type = "upper-roman")
figure2

figure2 %<>%
  fill_panel(q1, column = 1:2, row = 1) %<>%
  fill_panel(q2, column = 3, row = 1) %<>%
  fill_panel(q3, column = 1, row = 2) %<>%
  fill_panel(q4, column = 2:3, row = 2:3)
figure2

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


9

ggplot2 গ্রিড গ্রাফিক্সের উপর ভিত্তি করে তৈরি করা হয় যা কোনও পৃষ্ঠায় প্লট সাজানোর জন্য আলাদা সিস্টেম সরবরাহ করে। par(mfrow...)যেমন গ্রিড বস্তু (নামক কমান্ড সরাসরি সমতুল্য নেই grobs ) অগত্যা অবিলম্বে টানা হয় না, কিন্তু সংরক্ষিত হয় এবং নিয়মিত আর বস্তু হিসেবে কাজে ব্যবহৃত হতে পারে একটি গ্রাফিকাল আউটপুট রূপান্তরিত হওয়ার আগে। এটি এখন আঁকার চেয়ে বৃহত্তর নমনীয়তা সক্ষম করে বেস গ্রাফিক্সের মডেলের , তবে কৌশলটি অগত্যা কিছুটা আলাদা।

আমি grid.arrange()যতটা সম্ভব কাছাকাছি একটি সহজ ইন্টারফেস সরবরাহ করতে লিখেছি par(mfrow)। এর সহজতম ফর্মটিতে কোডটি দেখতে এমন হবে:

library(ggplot2)
x <- rnorm(100)
eps <- rnorm(100,0,.2)
p1 <- qplot(x,3*x+eps)
p2 <- qplot(x,2*x+eps)

library(gridExtra)
grid.arrange(p1, p2, ncol = 2)

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

আরো বিকল্প বিস্তারিত হয় এই চিত্র

একটি সাধারণ অভিযোগ হ'ল প্লটগুলি প্রয়োজনীয়ভাবে প্রান্তিক করা হয় না যখন তাদের বিভিন্ন আকারের অক্ষ লেবেল থাকে তবে এটি নকশা অনুসারে: grid.arrange বিশেষ-কেস জিগপ্লাট 2 বস্তুর জন্য কোনও প্রচেষ্টা করে না এবং উদাহরণস্বরূপ, অন্যান্য ছাঁকনিগুলির সাথে সমানভাবে আচরণ করে (জালির প্লট, উদাহরণস্বরূপ) )। এটি কেবল আয়তক্ষেত্রাকার বিন্যাসে পোঁদ রাখে।

Ggplot2 অবজেক্টের বিশেষ ক্ষেত্রে, আমি ggarrangeঅনুরূপ ইন্টারফেস সহ , অন্য একটি ফাংশন লিখেছিলাম , যা প্লট প্যানেলগুলি প্রান্তিককরণের চেষ্টা করে (ফেস্টেড প্লট সহ) এবং ব্যবহারকারীর দ্বারা সংজ্ঞায়িত হওয়ার সময় দিক অনুপাতকে সম্মান করার চেষ্টা করে।

library(egg)
ggarrange(p1, p2, ncol = 2)

উভয় ফাংশন সঙ্গে সামঞ্জস্যপূর্ণ ggsave()। বিভিন্ন বিকল্পগুলির একটি সাধারণ ওভারভিউ এবং কিছু general তিহাসিক প্রসঙ্গের জন্য, এই চিত্রটি অতিরিক্ত তথ্য সরবরাহ করে


9

আপডেট: এই উত্তরটি খুব পুরানো। gridExtra::grid.arrange()এখন প্রস্তাবিত পদ্ধতির হয়। এটি কার্যকর হতে পারে যদি আমি এখানে এটি ছেড়ে।


জেনেটিক্স সম্পন্ন ব্লগ পাওয়ার জন্য স্টিফেন টার্নার ফাংশনটি পোস্ট করেছিলেনarrange() (আবেদনের নির্দেশের জন্য পোস্ট দেখুন)

vp.layout <- function(x, y) viewport(layout.pos.row=x, layout.pos.col=y)
arrange <- function(..., nrow=NULL, ncol=NULL, as.table=FALSE) {
 dots <- list(...)
 n <- length(dots)
 if(is.null(nrow) & is.null(ncol)) { nrow = floor(n/2) ; ncol = ceiling(n/nrow)}
 if(is.null(nrow)) { nrow = ceiling(n/ncol)}
 if(is.null(ncol)) { ncol = ceiling(n/nrow)}
        ## NOTE see n2mfrow in grDevices for possible alternative
grid.newpage()
pushViewport(viewport(layout=grid.layout(nrow,ncol) ) )
 ii.p <- 1
 for(ii.row in seq(1, nrow)){
 ii.table.row <- ii.row 
 if(as.table) {ii.table.row <- nrow - ii.table.row + 1}
  for(ii.col in seq(1, ncol)){
   ii.table <- ii.p
   if(ii.p > n) break
   print(dots[[ii.table]], vp=vp.layout(ii.table.row, ii.col))
   ii.p <- ii.p + 1
  }
 }
}

9
এটি মূলত একটি খুব সেকেলে সংস্করণ grid.arrange- প্যাকেজ সংস্করণ একটি ভাল পছন্দ যদি আপনি আমাকে জিজ্ঞাসা আছে (অভিলাষও অবশিষ্ট আমি সময়ে মেইলিং তালিকা তে এটি না পোস্ট করেছেন এসব অনলাইন রিসোর্স আপডেট করার কোনো উপায় নেই)
Baptiste

4

ব্যবহার tidyverse:

x <- rnorm(100)
eps <- rnorm(100,0,.2)
df <- data.frame(x, eps) %>% 
  mutate(p1 = 3*x+eps, p2 = 2*x+eps) %>% 
  tidyr::gather("plot", "value", 3:4) %>% 
  ggplot(aes(x = x , y = value)) + 
    geom_point() + 
    geom_smooth() + 
    facet_wrap(~plot, ncol =2)

df

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


1

উপরের সমাধানগুলি কার্যকর না হতে পারে যদি আপনি একটি লুপ ব্যবহার করে একাধিক ggplot প্লট প্লট করতে চান (যেমন এখানে জিজ্ঞাসা করা হয়েছে: লুপের সাহায্যে বিভিন্ন Y-axis মান সহ ggplotে একাধিক প্লট তৈরি করা ) যা অজানা বিশ্লেষণে একটি পছন্দসই পদক্ষেপ ( বা বড়) ডেটা সেট (যেমন আপনি যখন কোনও ডেটা-সেটে সমস্ত ভেরিয়েবলের গণনা প্লট করতে চান) plot

নীচের কোডটি উল্লিখিত 'মাল্টিপ্লট ()' ব্যবহার করে কীভাবে এটি করবেন তা দেখায়, যার উত্সটি এখানে রয়েছে: http://www.cookbook-r.com/Graphs/ মাল্টিপল_গ্রাফিক্স_অন_নে_পেজ_(ggplot2 ) :

plotAllCounts <- function (dt){   
  plots <- list();
  for(i in 1:ncol(dt)) {
    strX = names(dt)[i]
    print(sprintf("%i: strX = %s", i, strX))
    plots[[i]] <- ggplot(dt) + xlab(strX) +
      geom_point(aes_string(strX),stat="count")
  }

  columnsToPlot <- floor(sqrt(ncol(dt)))
  multiplot(plotlist = plots, cols = columnsToPlot)
}

এখন ফাংশনটি চালান - এক পৃষ্ঠায় ggplot ব্যবহার করে মুদ্রিত সমস্ত ভেরিয়েবলের জন্য গণনা পেতে

dt = ggplot2::diamonds
plotAllCounts(dt)

একটি বিষয় লক্ষণীয়:
ব্যবহার aes(get(strX))করার পরে ggplot, উপরের কোডে আপনি সাধারণত লুপগুলিতে ব্যবহার করবেন , পরিবর্তে aes_string(strX)পছন্দসই প্লটগুলি আঁকবেন না। পরিবর্তে, এটি শেষ প্লটটি বহুবার প্লট করবে। আমি বুঝতে পারি নি কেন - এটি করতে হতে পারে aesএবং aes_stringডাকা হতে পারে ggplot

অন্যথায়, আশা করি আপনি কার্যটি দরকারী পাবেন find


1
মনে রাখবেন যে আপনার কোড এমন plotsবস্তুগুলিকে বৃদ্ধি করে for-loopযার মধ্যে অত্যন্ত অদক্ষ এবং প্রস্তাবিত নয়R । দয়া করে এই মহান পোস্ট দেখতে ভাল উপায় এটা করতে জানতে হবে: আর সুদক্ষ আহরণ , একটি ডাটা ফ্রেম সারি উপর একটি ফাংশন প্রয়োগ করা হচ্ছে & সারি ওরিয়েন্টেড tidyverse সঙ্গে দ কর্মপ্রবাহ
কাঠ বার্নিশ করার কাজের

ভেরিয়েবলগুলির মাধ্যমে লুপ করার আরও কার্যকরী উপায় হ'ল স্ট্যাকওভারফ্লো.comtidy evaluationggplot2 v.3.0.0
টুং

0

আমার অভিজ্ঞতায় গ্রিডএক্সট্রা: গ্রিড.আরঞ্জ পুরোপুরি কাজ করে, যদি আপনি কোনও লুপে প্লট তৈরি করার চেষ্টা করছেন।

শর্ট কোড স্নিপেট:

gridExtra::grid.arrange(plot1, plot2, ncol = 2)

আপনার উত্তর কীভাবে 4:20 এ ডিসেম্বর 2 '17-এর ব্যাপটিস্টের উত্তরে উন্নতি করবে? আপনার উত্তরটি সদৃশ বলে মনে হচ্ছে। এখানে কী
পিটার

আমি একটি লুপের মধ্যে প্রয়োজনীয় হিসাবে প্লটটি ভাগ করতে পারিনি, এবং সেইজন্য পরামর্শটি। প্রাথমিকভাবে, আমি এটির প্রয়োগের সাথে লুপের জন্য আমার সম্পূর্ণ স্নিপেট লিখেছিলাম তবে তারপরে আপাতত এর বিরুদ্ধে সিদ্ধান্ত নিয়েছি। এক সপ্তাহ বা তার মধ্যে পুরো কোডটি আপডেট করবে।
মায়াঙ্ক অগ্রওয়াল

ডেভিড লেবাউরের গৃহীত উত্তরটি দেখুন
পিটার

আমি প্রথম স্থানে কাউপ্লট প্যাকেজ ব্যবহার করে এটি করার চেষ্টা করেছি কিন্তু ব্যর্থ হয়েছিল। আমার দ্রুত স্ক্যান করার সময়, কেউ লুপের জন্য একাধিক চক্রান্ত সমাধানের কথা উল্লেখ করেনি এবং তাই আমার মন্তব্য। আমি ভুল হলে আমাকে কোন মন্তব্য পড়ুন।
মায়াঙ্ক অগ্রওয়াল

যদি আপনার উত্তরের কোডটিতে লুপের জন্য একটি অন্তর্ভুক্ত থাকে তবে ভিন্ন।
পিটার

-3

cowplotপ্যাকেজ আপনি এই কাজ করতে একটা চমৎকার উপায় দেয়, এমনভাবে মামলা প্রকাশনার।

x <- rnorm(100)
eps <- rnorm(100,0,.2)
A = qplot(x,3*x+eps, geom = c("point", "smooth"))+theme_gray()
B = qplot(x,2*x+eps, geom = c("point", "smooth"))+theme_gray()
cowplot::plot_grid(A, B, labels = c("A", "B"), align = "v")

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


3
আরও দেখুন প্যাকেজ লেখক 'আরও বিস্তারিত উত্তর এবং উপরোক্ত যুক্তিপূর্ণ stackoverflow.com/a/31223588/199217
ডেভিড LeBauer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.