应用ggplot2对数据框的列数据进行循环画图的时候,由于aes()
的参数不能指定字符串形式的列名(如aes(y="column_A")
是不支持的),可以使用aes_string(y="column_A")
来传递字符串形式的列名,这样每次处理不同的列数据的时候通过列编号获取列名传递,绘图数据的列名可以通过names(data.plot)[col.number]
方法由列号取得。
getData <- function(n=100,is.str=FALSE){
data.retro = data.frame(
value = ceiling(runif(n = n,min = -1,max = 1)),
UMIcounts = round(runif(n = n,min = 0,max = 10000),0),
norm = rnorm(n=n,mean=10,sd=1),
expr = rexp(n),
No = seq(n)
)
if (is.str) {
data.retro = cbind(data.retro,strings = stringi::stri_rand_strings(n, 5, pattern = "[A-Za-z0-9]"))
}
rownames(data.retro) = make.unique(stringi::stri_rand_strings(n, 5, pattern = "[A-Za-z0-9]"), sep = '_')
return(data.retro)
}
data.plot <- getData(30)%>% tibble::rownames_to_column("Class") %>% select(Class,expr)
> data.plot
Class expr
1 E8Qh8 0.35570062
2 hI2yy 0.04600188
3 o0jOk 0.54236507
... 30 rows * 2 cols
使用aes_string()
可以使用字符串形式的变量名,如通过 names(data.plot)[2]
可以获取绘图数据第2列的列名"expr"。
条形统计直方图
data.plot %>% ggplot(aes_string(x = "Class",y = names(.)[2])) +
geom_bar(stat = "identity",fill="skyblue",color="red") +
ggtitle(names(data.plot)[2])+ theme_bw() + coord_flip() +
theme(plot.title = element_text(hjust = 0.5,face = 1,size = 15),axis.title.x = element_blank())
网友评论