ggplot-aes_string()使用列索引编号获取列名-示

2022-07-01  本文已影响0人  倪桦

应用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())
上一篇 下一篇

猜你喜欢

热点阅读