2015-11-06 22 views
1

我想用facet_wrap製作圖形,並將它繪製在pdf文件的不同頁面中。我讀過兒子很多選擇,並且這可以工作: R + ggplot: plotting over multiple pages 但只有當您在每個頁面中具有相同的行時。ggplot,繪製多行不同行的頁面

我有這樣的演示數據,試圖解釋我的情況:

A <- data.frame(TIME = rep(c(0, 5, 10, 15, 30, 45, 60), 5)) 
A$C <- (1 - exp(-0.2*A$TIME)) 
A$ID <- rep(1:5, each = 7) 
A$R <- rnorm(35, mean = 1, sd = 0.01) 
A$C2 <- A$C*A$R 
Pages <- 5 
A2 <- A[c(1,4:8,10:22,24:35),] 

所以,我有不同數量的觀測的ID。我嘗試使用每個ID中的觀察數量來創建一個矢量(我想每個頁面都有一個ID),但它不起作用。

nrws <- ddply(A2, .(ID), "nrow") 
nsamp <- nrws[,2] 

pdf("Test.pdf") 
for (i in seq(Pages)) 
    { 
    slice = seq(((i-1)*nsamp[i]),(i*nsamp[i])) 
    slice2 = slice[!(slice > nrow(A2))] 
    A3 = A2[slice2,] 
    p1 <- ggplot(A3, aes(x = TIME, y = C2)) + 
     geom_line(size = 0.5) + 
     geom_point(size = 1) + 
     facet_wrap(~ID) 
print(p1) 
    } 
dev.off() 

你能幫我嗎?

謝謝進步, 納喬

回答

1

我想你得太多了嘗試計算你的「切片」。也許你想要這個?

不完全確定。如果您只希望每頁有一個ID,則不需要facet_wrap,而且您可能需要明確設置比例以保持頁面之間的一致。

library(plyr) 

A <- data.frame(TIME = rep(c(0, 5, 10, 15, 30, 45, 60), 5)) 
A$C <- (1 - exp(-0.2*A$TIME)) 
A$ID <- rep(1:5, each = 7) 
A$R <- rnorm(35, mean = 1, sd = 0.01) 
A$C2 <- A$C*A$R 
Pages <- 5 
A2 <- A[c(1,4:8,10:22,24:35),] 

nrws <- ddply(A2, .(ID), "nrow") 
nsamp <- nrws[,2] 

pdf("Test.pdf") 
for (i in seq(Pages)) 
{ 
# slice = seq(((i-1)*nsamp[i]),(i*nsamp[i])) 
# slice2 = slice[!(slice > nrow(A2))] 
# A3 = A2[slice2,] 

    A3 = A2[A2$ID==i,] 
    p1 <- ggplot(A3, aes(x = TIME, y = C2)) + 
    geom_line(size = 0.5) + 
    geom_point(size = 1) + 
    facet_wrap(~ID) 
    print(p1) 
} 
dev.off() 
+0

你說得對,用你的解決方案(比我的容易)我不需要facet_wrap。非常感謝!! –

+0

您可能需要使用'scale_y_continuous'來明確設置y範圍,否則它會因頁面而異,並且比較難以進行比較。這是'facet_wrap'自動爲你做的事情,但只能在給定的'ggplot'調用中。 –