2010-04-01 53 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