web-dev-qa-db-fra.com

Tracer deux graphiques sur le même graphique R, ggplot2 par (mfrow ())

J'ai l'impression après avoir creusé que cela ne fonctionnera probablement pas et je devrai découvrir une autre méthode mais je vais quand même demander.

Je dois représenter des graphiques que je veux tracer sur le même graphique, en utilisant par(mfrow=c(1,2))

Mon code pour les graphiques est le suivant:

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")

Si cela n'est pas possible, alors une direction vers un meilleur itinéraire serait appréciée.

Merci,

17
MCP_infiltrator

Regardez le package gridExtra et utilisez grid.arrange au lieu. Fonctionne à merveille avec ggplot.

Attribuez simplement votre premier ggplot appel à une variable (par exemple plot1) et la suivante (par exemple plot2) et faites quelque chose comme:

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

mfrow est destiné aux graphiques de base. Pour ggplot2 vous avez besoin d'une approche différente, comme celle mentionnée par @hrbmstr, ou celle-ci:

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))
6
Bryan Hanson

Tard dans la soirée, mais j'ai juste eu à faire face à cela et j'ai trouvé une solution simple pour les multiplots simplement en regardant dans le package gridExtra (builind sur @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)

Multi-plot with ggplot and grid

Mettez simplement votre fonction de génération de tracé dans lapplyet vous êtes prêt.

3
victor_v