График двух графиков на одной диаграмме 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
, и вы все настроены.