在ggplot图中使用aes_string对列名使用函数

  • 本文关键字:函数 string aes ggplot ggplot2
  • 更新时间 :
  • 英文 :


我想绘制一些图形,列名在循环中变化。我还想将log2()应用到这一列,所以我的计划是这样做:

df <- data.frame(x=c(1,2,3,4,5),
                 y.bla=c(2,3,4,5,6),
                 y.blub=c(5,4,3,2,1))
for(label in c('bla','blub')) {
  g <- ggplot(df, aes_string(x='x', y=paste0('y.', label))) + geom_point()
  print(g)
}
for(label in c('bla','blub')) {
  g <- ggplot(df, aes_string(x='x', y=log2(paste0('y.', label)))) + geom_point()
  print(g)
}

但实际上,log2函数不能处理字符串。
有解决办法吗?

我想在循环中执行此操作,而不是使用facet换行或类似的方法,因为我将这些单个图形附加到不同图形的列表中。

可能有几种方法可以做到这一点。我会按名称从数据框中提取元素,并在绘制之前对它们进行转换。

for(label in c('bla','blub')) {
  temp_var <- log2(df[[paste0('y.', label)]])
  g <- ggplot(df, aes(x=x, y= temp_var)) + geom_point()
  print(g)
}   

最新更新