2014-11-18 2 views
0

동일한 페이지에 ggplot을 사용하여 여러 개의 플롯을 표시하고 여기에 설명 된 multiplot 함수를 http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/으로 표시하고 싶습니다. 내 데이터는 큰 데이터 프레임에 저장되며 첫 번째 열은 마침표와 일치합니다. 나는 칼럼 2:26을 시각화하고 싶다. 내 문제는 사용하여 재현 :루프, 데이터 프레임 및 gplot

rawdata1 <- data.frame("Period" = 1:34, "Sample" = sample(x = c(1,2),34, replace = TRUE),"Runif" = runif(n = 34)) 

를 직관적으로, 다음 코드를 사용합니다 (2와 3 2:26로 대체)

out <- NULL 
for (i in 2:3){ 
    out[[i-1]] <- ggplot(rawdata1, aes("Period", y = value)) + geom_line(aes(x = Period, y = rawdata1[[i]])) + ggtitle(label = colnames(rawdata1)[i]) 
} 

multiplot(plotlist = out, cols = 2) 

이 그러나, 여러 그래프를 플롯에 내 문제를 성공 플로팅 된 각 그래프는 동일한 열 (위의 예에서 열 3, 내 데이터 집합의 열 26)에서 데이터를 사용한다는 것입니다. 내 "out"목록에 y 값이 동적으로 저장된 ggplot 목록을 저장하기 때문에 이것이 문제라는 것을 혼란스러워했습니다.

i의 최종 값은 26이며 "out"에서 항목을 호출하면 그래프의 작성에 i의 현재 값이 사용됩니다. 따라서 모든 그래프는 동일한 열을 사용하여 표시됩니다. 내가 R을 처음 접했을 때 내 변수가 올바르게 관리되지 않는다고 생각합니다. 어떤 도움을 주시면 감사하겠습니다.

+1

당신은 당신이 제안하는 방식을 (위해 – baptiste

+0

을 facetting 긴 형식과 사용에 data.frame을 녹여 간단하게 할 수) aes()를 쓰지 말고'aes_string()'을 써야합니다. (이것이 패싯 (facet)을위한 것입니다.) – Gregor

답변

1

아래에서 melt 기능을 사용하여 reshape2에서 기능을 수행 한 다음 facet_wrap으로 패 시트를 지정하십시오.

require(ggplot2) 
require(reshape2) 
data.melt <- melt(rawdata1, id.var='Period') 
ggplot(data.melt, aes(Period, value)) + 
    geom_line() + 
    facet_wrap(~variable, scales='free_y') 

대신 multiplot를 사용하려는 경우, 당신은 할 수있는 다음

out <- lapply(names(rawdata1)[-1], 
       function(index) ggplot(rawdata1) + 
       geom_line(aes_string(x = 'Period', y = index)) + 
       ggtitle(label = index)) 
multiplot(plotlist = out, cols = 2) 
+0

이것은 완벽합니다. 감사! – Chris

관련 문제