График двух графиков на одной диаграмме R, ggplot2 par (mfrow())

У меня возникает ощущение, что после некоторого копания это, вероятно, не сработает, и мне нужно будет найти альтернативный метод, но я все равно спрошу.

У меня есть графики, которые я хочу построить на одной диаграмме, используя par(mfrow=c(1,2))

Мой код для графиков выглядит следующим образом:

mTotal <- mean(data$Total)
mTotal

data$valence1[data$Total >= mTotal] <- "Above Mean"
data$valence1[data$Total < mTotal] <- "Below Mean"
data$valence2[data$Delta >= 0] <- "Positive"
data$valence2[data$Delta < 0] <- "Negative"

data

par(mfrow=c(1,2))

ggplot(data,
       aes(x = Index,
           y = Total,
           fill = valence1)) +
  geom_bar(stat = "identity",
           colour = "black",
           alpha = 0.618) +
  geom_hline(yintercept = mTotal,
             linetype = "dashed",
             colour = "red") + 
  annotate("text", x = 19, y = mTotal + 50,
           label = "Problem Period") + 
  xlab("Date") + 
  ylab("Ambulance Arrivals") +
  ggtitle("Ambulance Arrivals by Month
          Jan 2013 - Feb 2014")

maxDelta <- max(data$Delta)
maxDelta
minDelta <- min(data$Delta)
minDelta

ggplot(data,
       aes(x = Index,
           y = Delta,
           fill = valence2)) +
  geom_bar(stat = "identity",
           position = "identity",
           colour = "black",
           alpha = 0.618) +
  annotate("rect", xmin = 13.5, xmax = 24.5,
           ymin = minDelta, ymax = maxDelta,
           alpha = 0.3, fill = "blue") +
  annotate("text", x = 19, y = maxDelta + 25,
           label = "Problem Period") +
  xlab("Date") +
  ylab("Change in Arrivals") + 
  ggtitle("Change in Ambulance Arrivals Month over Month")

Если это невозможно, то будет оценено направление к лучшему маршруту.

Спасибо,

Ответ 1

Посмотрите на пакет gridExtra и используйте grid.arrange. Прекрасно работает с ggplot.

Просто назначьте свой первый вызов ggplot переменной (например, plot1) и рядом с другой (например, plot2) и выполните следующее:

grid.arrange(plot1, plot2, nrow=1, ncol=2)

Ответ 2

mfrow предназначен для использования с базовой графикой. Для ggplot2 вам нужен другой подход, например, тот, который указан @hrbmstr, или этот:

library("ggplot2")
library("grid")

a <- qplot(x = rnorm(10))
b <- qplot(x = rnorm(10))

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)

grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))

print(a, vp = vplayout(1,1))
print(b, vp = vplayout(1,2))

Ответ 3

Поздно к вечеринке, но мне просто пришлось разобраться с этим и найти простое решение для мультиплетов, просто посмотрев в пакете gridExtra (builind on @hrbrmstr):

library("ggplot2")
library("gridExtra")
pl <- lapply(1:4, function(.x) qplot(1:10, rnorm(10), main=paste("plot", .x)))
marrangeGrob(pl, nrow=2, ncol=2)

Многострочный график с ggplot и сеткой

Просто поставьте функцию построения графика в lapply, и вы все настроены.