簡體   English   中英

為r中每個因子水平返回一個圖

[英]return a plot for each level of a factor in r

我想為數據幀“軌跡”中的每個單獨的ID生成X,Y圖:

**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獲得單獨的圖?

您可以很好地使用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軟件包進行拆分和繪圖,但是您需要將繪圖寫入文件中,或者在創建每個新繪圖時它們將關閉。

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)

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

coplot(Sepal.Length ~ Sepal.Width | Species, data = iris)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM