我想绘制一些图形,列名在循环中变化。我还想将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)
}