2014-04-24 34 views
11

Mam wrażenie, że po zrobieniu niektórych kopanie, prawdopodobnie to nie zadziała i będę musiał odkryć alternatywną metodę, ale ja i tak o to zapytam.Sporządź dwa wykresy na tym samym wykresie R, ggplot2 par (mfrow())

muszę wykresów, które chcę działki na tym samym wykresie, poprzez wykorzystanie par(mfrow=c(1,2))

mojego kodu na wykresach jest następujący:

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

Jeśli nie jest to możliwe, a następnie wskazany byłby kierunek lepszej trasy.

Dziękuję

Odpowiedz

19

Spójrz na opakowaniu gridExtra i używać grid.arrange zamiast. Działa wspaniale z ggplot.

Wystarczy przypisać swój pierwszy ggplot wezwanie do zmiennej (np plot1) i obok siebie (np plot2) i zrobić coś takiego:

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

Dziękuję, to było raczej proste rozwiązanie i zrobiłem dokładnie to, co chciałem. –

+0

Co jeśli chciałbym wybrać dla 'plot1' i' plot2', które mają być ułożone, a następnie powiedzieć 'plot3' i' plot4', aby ułożyć się obok niego. Podobne do 'par (mfcol)' – Bonono

+1

@Bonono Wystarczy ustawić 'nrow' i' ncol' na wartości sensowne i poeksperymentuj, aby dowiedzieć się, czy wykresy "wypełniają" układ od lewej do prawej lub od góry do dołu. –

6

mfrow jest do pracy z grafiką bazowych. Dla ggplot2 trzeba innego podejścia, jak te wymienione przez @hrbmstr, czy to jedno:

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)) 
+0

Dziękuję za pokazanie mi alternatywnej metody rozwiązania hrbrmstrs. –

3

późno do partii, ale po prostu musiałem sobie z tym poradzić i znaleźć proste rozwiązanie dla multiplots po prostu patrząc w w pakiecie gridExtra (builind na @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

Wystarczy umieścić wykreślić funkcję generowania w lapply i jesteś cały zestaw.

+0

Co jeśli chciałbym wybrać dla 'plot1' i' plot2', które mają być ułożone, a następnie powiedzieć 'plot3' i' plot4', aby ułożyć się obok niego. Podobny do 'par (mfcol)' – Bonono

+1

@Bonono Zakładam, że właśnie to będziesz potrzebować biblioteki ("ggplot2") biblioteka ("gridExtra") pl <- lapply (1: 4, funkcja (.x) qplot (1:10, rnorm (10), main = pasta ("plot", .x))) lay <- rbind (c (1,3,4), c (2,3,4)) siatka.aranżuj (grobs = pl, layout_matrix = lay) 'który da ci [to] (http://i.imgur.com/7izwkMz.png). Aby uzyskać więcej informacji, zobacz także [tutaj] (https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html) –

+1

Dziękuję zwycięzcy! Oto coś jeszcze łatwiejszego: http://stackoverflow.com/questions/40877386/grid-arrange-ggplot2-plots-by-columns-instead-of-by-row-using-lists/40877889?noredirect=1#comment68971679_40877889 – Bonono

Powiązane problemy