ggplot2多个情节保持旧情节

时间:2016-02-22 15:57:27

标签: r plot ggplot2 dataframe

我试图从数据框中绘制30个直方图

'data.frame':   569 obs. of  32 variables:
 $ ID       : int  842302 842517 84300903 84348301 84358402 843786 844359     84458202 844981 84501001 ...
 $ Diag     : Factor w/ 2 levels "B","M": 2 2 2 2 2 2 2 2 2 2 ...
 $ Radius   : num  5.1 5.84 5.59 3.24 5.76 ...
 $ Text     : num  2.41 4.13 4.94 4.74 3.33 ...
 etc....

我想通过Diag(恶性或良性癌症)对所有属性进行分组,并将它们作为多个时间(30个单独的直方图)保存在文件中。

但是,当我按照我的方式(迭代列)时,ggplot似乎以某种方式保留旧数据并且它不会根据当前列更改,除非我手动执行。

这是我的图形循环,试图将每个图保存在列表中:

graph_att<-function(to=10){
  plots<-vector("list",to)
for (i in 1:to){
  dev.next()
  ind<-i+2
  a<-t[1,i] #data.frame with vertical lines I want in the histograms

  g<-ggplot(dataNorm[,c(2,ind)], aes(dataNorm[,ind]))+geom_histogram(aes(fill=Diag), 
  position="identity", colour="#999999", alpha=0.8, binwidth = 0.25)+
  geom_vline(xintercept = a) + 
  scale_fill_manual(values = c("#0072B2", "#E69F00"))

plots[[i]]<-g
rm(g) #trying to make sure its a new plot
}

return(plots)
}

我正在使用http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/中的多重绘图功能将它绘制在一起。 但我得到这个输出,它只改变垂直线并只保留一个直方图。

我还有一个想法是创建另一个data.frame,并在每一列中放入$ Diag和其他变量,但不知道如何迭代它们。因为我认为ggplot不会访问我想要的列。

感谢您的帮助。

PS:这就是我得到的

my output

1 个答案:

答案 0 :(得分:1)

aes执行非标准评估。它期望data.frame的列名(没有引号)传递给data参数。您可以使用aes_string将列名称作为字符串传递:

aes_string(names(dataNorm)[ind])