2013-02-22 49 views
1

欲產生的X,Y圖表,用於從數據幀的每個單獨的ID「軌跡」:返回一個情節爲一個因素的每一級中的R

**trajectories** 

X Y ID 
2 4  1 
1 6  1 
2 4  1 
1 8  2 
3 7  2 
1 5  2 
1 4  3 
1 6  3 
7 4  3 

我使用的代碼:

sapply(unique(trajectories$ID),(plot(log(abs(trajectories$X)+0.01),log((trajectories$Y)+0.01)))) 

但這似乎並沒有因爲錯誤的工作:

Error in match.fun(FUN) : 
c("'(plot(log(abs(trajectories$X)+0.01),log((trajectories$Y)' is not a function,  character or symbol", "' 0.01)))' is not a function, character or symbol") 

有沒有辦法讓我得到每個ID單獨的情節改寫這個代碼?

回答

4

可以使用ggplot2包這很好:

library(ggplot2) 
trajectories <- structure(list(X = c(2L, 1L, 2L, 1L, 3L, 1L, 1L, 1L, 7L), Y = c(4L, 6L, 4L, 8L, 7L, 5L, 4L, 6L, 4L), ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L)), .Names = c("X", "Y", "ID"), class = "data.frame", row.names = c(NA, -9L)) 

ggplot(trajectories, aes(x=log(abs(X) + 0.01), y=log(Y))) + 
    geom_point() + 
    facet_wrap(~ ID) 

爲了什麼它的價值,你的鱈魚是失敗的原因是錯誤說什麼。 sapply的第二個參數需要是一個函數。如果你定義情節代碼的函數:

myfun <- function(DF) { 
    plot(log(abs(DF$X) + 0.01), log(DF$Y)) 
} 

但這不會對ID拆分您的數據。您也可以使用plyrdata.table包進行分割和繪圖,但您需要將繪圖寫入文件,否則將在每個新繪圖創建時關閉。

+0

哇ggplot2包正是我所需要的!非常感謝! – Joeri 2013-02-22 16:25:31

1

lattice包在這裏很有用。

library(lattice) 
# Make the data frame 
X <- c(2,1,2,1,3,1,1,1,7) 
Y <- c(4,6,4,8,7,5,4,6,4) 
ID <- c(1,1,1,2,2,2,3,3,3) 
trajectories <- data.frame(X=X, Y=Y, ID=ID) 

# Plot the graphs as a scatter ploy by ID 
xyplot(Y~X | ID,data=trajectories) 

# Another useful solution is to treat ID as a factor 
# Now, the individual plots are labeled 
xyplot(Y~X | factor(ID),data=trajectories) 
0

即使與基本的R這是可能的。使用虹膜數據集:

coplot(Sepal.Length ~ Sepal.Width | Species, data = iris) 
相關問題