2011-04-05 4 views
4

애니메이션을 만들기 위해 ggplots 목록을 만들고 있습니다. X 축에 레이블을 강조 표시하고이 강조 표시의 위치가 애니메이션의 여러 프레임에 걸쳐 변경됩니다.ggplots 목록에서 축 레이블을 어떻게 변경합니까?

다음은 샘플 플롯입니다. 첫 번째 축 레이블은 프레임 1에서 강조 표시되어야하고 두 번째 축 레이블은 프레임 2에서 강조 표시되어야합니다.

p <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
    geom_boxplot() 
p_list <- list() 

for(i in 1:2) 
{ 
    x_label_cols <- rep("grey50", 3) 
    x_label_cols[i] <- "red" 
    p_list[[i]] <- p + 
    opts(
     axis.text.x = theme_text(
     colour = x_label_cols 
    ) 
    ) 
} 

불행히도, x_label_cols이 줄거리를 인쇄 할 때이 작성하지 않을 경우, 평가, 그래서 두 프레임이 두 번째 레이블이 강조가되는 것 같다. 따라서 print(p_list[[1]])이 잘못 표시됩니다.

목록의 각 플롯에 대해 다른 축 레이블 색상을 얻으려면 어떻게해야합니까?

+2

이 애니메이션을 만드는 것은 쉽게 그대로'saveGIF (인쇄 (p_list))' . ('animation' 패키지 필요) –

답변

4

saveGIF() 내에서 수신 거부를 조정하지 않는 이유는 무엇입니까? 내가 아는 한, 은 마치 options()처럼 작동하지만 ggplot2를 위해 특별히 작동합니다. 따라서 코드에서 옵션을 두 번 설정하지만 옵션을 마지막으로 변경 한 후에 만 ​​그래프를 인쇄하십시오. 따라서 saveGIF() 내에서 실행되는 코드에 옵션 변경 사항을 포함시켜야합니다.

이 코드는 나를 위해 그것을 수행합니다

p <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
    geom_boxplot() 

saveGIF(
    sapply(1:2,function(x){ 
     x_label_cols <- rep("grey50", 3) 
     x_label_cols[x] <- "red" 
     print(p + 
     opts(axis.text.x = theme_text(colour = x_label_cols)) 
    ) 
    }) 
) 

가 제공합니다 :

이 경우 당신이 관심이에서

enter image description here

+0

고마워요. 사소한 단점은 플롯 생성 코드와 인쇄 코드를 섞어 놓은 것이지만, 다른 곳에서이 코드를 코드 위로 옮길 수 있다고 가정합니다. 그리고 그것은 확실히 작동합니다. 그래서 좋은 생각입니다! –

+1

@ 리치 : 사실, 한 번만 플롯을 만들어야합니다. 플롯이 아니라 변경하는 옵션 일뿐입니다. 따라서 기술적으로 saveGIF 내에 플롯을 만들지 않으면 올바른 옵션을 만들 수 있습니다. ;) –

관련 문제