2010-04-01 50 views
0

這很奇怪 - 我想?(我在xxx)ggplot問題

library(ggplot2) 
tf <- which(sapply(diamonds, is.factor)) 
diamonds.tf <- diamonds[,tf] 

到目前爲止好。但接下來的麻煩:

pl.f <- ggplot(diamonds.tf, aes(x=diamonds.tf[,i]))+ 
geom_bar()+ 
xlab(names(diamonds.tf[i])) 

for (i in 1:ncol(diamonds.tf)) { 
ggsave(paste("plot.f",i,".png",sep=""), plot=pl.f, height=3.5, width=5.5) 
} 

這將繪圖保存在我的工作目錄 - 但與錯誤的x標籤。我認爲這是奇怪的,因爲直接調用ggplot產生右圖:

i <- 2 
ggplot(diamonds, aes(x=diamonds[,i]))+geom_bar()+xlab(names(diamonds)[i]) 

我真的不知道該怎麼形容這是一個適合的標題 - 建議,以一個更具描述性的問題,標題是最歡迎的。

在此先感謝

+0

你需要'xlab(names(diamonds.tf)[i])'? – 2010-04-02 00:37:38

+0

嗨喬納森 - 我昨天試過,效果相同。它工作/不工作 - 與我一樣的samme方式。不過謝謝你的建議。 – Andreas 2010-04-02 08:36:28

回答

6

這不奇怪 - 你pl.f不採取i作爲參數。事實上,如果你沒有定義i,你甚至不能運行你的代碼。我想你想要類似

pl.f <- function(i) 
    ggplot(diamonds.tf, aes(x=diamonds.tf[,i]))+ 
      geom_bar()+xlab(names(diamonds.tf[i])) 

for (i in 1:ncol(diamonds.tf)) { 
    p <- pl.f(i) 
    ggsave(paste("plot.f",i,".png",sep=""), plot=p, height=3.5, width=5.5) 
} 
+0

這個工作 - 我想這只是表明我幾乎沒有編程任何東西。這很有趣,因爲我的原始代碼生成並保存了所有正確的地塊。只有傳說沒有正確生成。你的解決方案一切正常。 – Andreas 2010-04-02 08:39:31

+3

這不是使用aes的好方法 - 你應該傳遞變量的名稱而不是內容。我建議使用'aes_string(x = names(df)[i])' – hadley 2010-04-02 13:15:32

+0

我看你在第10章給出了這個建議。我不認爲我理解爲什麼 - 但也許我會在我開始時在函數中使用ggplot更多。謝謝 – Andreas 2010-04-02 18:16:34