自动在同一数据帧中生成ggplot

时间:2015-02-27 21:27:11

标签: r graph ggplot2

我有一个数据集,其第一列是日期格式的句点,然后是大约50列。所有列都具有相同的比例和数字。我试图一次绘制两列,然后按期间列第1列和第2列,然后按第3列和第4列等,直到我用完迭代。

我写的功能不起作用。它没有给我任何错误,但没有产生输出。当我在循环之外运行代码时,它可以工作。

下面的可重复样本

H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE)))  
H$Date<-seq(as.Date('2001-03-31'),by='quarter',length=10)
H<-H[,c(11,1,2,3,4,5,6,7,8,9,10)]



 plotmebabe<-function(a){
  for (i in 2:length(a)){
    ggplot(data=a,aes(x=Date)) + 
      geom_line(aes(y=a[,i]),color="blue",size=2)+
      geom_line(aes(y=a[,i+1]),color="pink",size=2) +
      ylab(label="This is Y axis")+
      xlab("This is X axis")+
      ggtitle("Hello")+ 
      theme(plot.title = element_text(lineheight=.8, face="bold"))
  }}

1 个答案:

答案 0 :(得分:1)

只绘制ggplot对象,实际上是print() - ed。在交互式命令行中键入内容时,结果将隐式print() - ed。当您在for循环中运行代码时,不会发生此隐式打印。你需要在对象上实际调用print()来触发绘图。

这是一个更新版本(修复其他错误)

 plotmebabe<-function(a){       
  for (i in 2:(ncol(a)-1)){
    print(ggplot(data=a,aes(x=Date)) + 
      geom_line(aes_string(y=names(a)[i]),color="blue",size=2)+
      geom_line(aes_string(y=names(a)[i+1]),color="pink",size=2) +
      ylab(label="This is Y axis")+
      xlab("This is X axis")+
      ggtitle("Hello")+ 
      theme(plot.title = element_text(lineheight=.8, face="bold")))
  }}
plotmebabe(H)