我试图从数据框中绘制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:这就是我得到的
答案 0 :(得分:1)
aes
执行非标准评估。它期望data.frame的列名(没有引号)传递给data
参数。您可以使用aes_string
将列名称作为字符串传递:
aes_string(names(dataNorm)[ind])