2011-04-05 42 views
4

我正在創建一個ggplots的列表,以便製作動畫。我想在x軸上突出顯示一個標籤,並且此突出顯示的位置會在不同的動畫幀中發生變化。如何更改ggplots列表中的軸標籤?

下面是一個示例圖。第一個軸標籤應在第一幀中突出顯示,第二個在第二幀中突出顯示。

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))' 。 (需要'動畫'包。) – 2011-04-05 09:55:37

回答

4

爲什麼不在saveGIF()內調整opts?據我所知,opts()就像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

謝謝。小的缺點是它將劇情創作代碼與打印代碼混合在一起,但是我想我可以將這個功能移到其他地方來完善代碼。它絕對有效,所以好想! – 2011-04-05 12:16:38

+1

@Richie:實際上,你只需要創建一次劇情。這只是你改變的選項,而不是情節。所以從技術上講,您不會在saveGIF內創建繪圖,您可以創建正確的選項。 ;) – 2011-04-05 12:59:57