使用apply()绘图时,在绘图标题中包含列名

时间:2017-12-25 15:29:17

标签: r

我正在尝试为数据框的每列创建一个绘图。在图的标题中,我想插入列名。但我不清楚如何循环列名称。

`
snp1 <- runif(10,0,1)
snp2 <- runif(10,0,1)
snp3 <- runif(10,0,1)
snp4 <- runif(10,0,1)
pops <- paste('pop',1:10,sep='')
freq<- data.frame(snp1, snp2, snp3, snp4)
rownames(freq) <- pops
`

`freq
           snp1       snp2      snp3      snp4
pop1  0.4174916 0.16731405 0.3128548 0.8911312
pop2  0.6965112 0.38021753 0.9039974 0.7716086
pop3  0.6993367 0.35984906 0.5455272 0.4824148
pop4  0.5274188 0.23394308 0.8256183 0.5394379
pop5  0.1561838 0.57830706 0.3515259 0.9654348
pop6  0.1712315 0.05702597 0.2600516 0.7401471
pop7  0.6950924 0.15866269 0.1411592 0.3601718
pop8  0.1360697 0.96311812 0.3862654 0.5717191
pop9  0.4941322 0.63638984 0.3307210 0.5176871
pop10 0.1986985 0.63893809 0.9380498 0.2106029
`

`
library(ggplot2)
pdf('snp_plots.pdf')
apply(freq, 2, function(x) qplot(1:10, x, ylim=c(0,1), main=colnames(freq)))
dev.off()
`

1 个答案:

答案 0 :(得分:1)

您可以使用map2中的purrr代替apply

library(purrr)
library(ggplot2)
map2(.x = freq, .y = names(freq), ~qplot(1:10, .x, ylim = c(0, 1), main = .y))

修改

我们可以使用purrr::imap代替,这是map2(x, names(x), ...)

的简写
imap(.x = freq, ~qplot(1:10, .x, ylim = c(0, 1), main = .y))