【发布时间】:2020-01-09 13:36:43
【问题描述】:
我有一个如下所示的数据框列表。我想为每个数据帧绘制条形图,作为 x 轴上的范围和 y 轴上的 wt0。当我尝试在循环下运行时,它会绘制最后一个数据帧的图形。
li
[[1]]
varName Range wt0 wt1
1 var 1 (-Inf,-6] 858 7788
2 var 1 (-6,0.5] 1698 85194
3 var 1 (0.5,1.5] 2040 15240
4 var 1 (1.5,2.5] 1928 7815
5 var 1 (2.5,3.5] 1900 5228
[[2]]
varName Range wt0 wt1
1 var 2 (-Inf,-6] 858 7788
2 var 2 (-6,-5] 3 6
3 var 2 (-5,-4] 57 196
4 var 2 (-4,-3] 5 162
5 var 2 (-3,-2] 4008 18285
[[3]]
varName Range wt0 wt1
1 var 3 (-Inf,-6] 858 7788
2 var 3 (-6,-2] 3205 11246
3 var 3 (-2,-1] 2968 94972
4 var 3 (-1,12.5] 5741 17884
5 var 3 (12.5,Inf] 11267 8167
[[4]]
varName Range wt0 wt1
1 var 4 (-Inf,-6] 858 7788
2 var 4 (-6,-2] 3487 2387
3 var 4 (-2,-1] 5049 3361
4 var 4 (-1,1.5] 3607 4081
5 var 4 (1.5,4.5] 2043 3699
for (i in 1:4){
c <- li[[i]]
p<- ggplot(c) +
geom_bar(aes(x=c$Range, y=c$wt0), stat = "identity")
}
【问题讨论】:
-
循环遍历列表或将列表映射到
ggplot函数。这是想做什么?li[[i]]?它在您的 for 循环之上,并且没有其他 i 实例。另外,使用c作为变量名并不是一个很好的选择,尽管它并不重要。 -
你能用 dput() 做一个可重现的例子吗?
-
将
c <- li[[i]]移动到循环的第一行,并将print(p)添加到循环的最后一行。最后,将aes中的所有$替换为Range != binRange列的适当名称。 -
@NelsonGon 即使在遍历列表之后,它也会显示相同的结果。
-
考虑合并所有数据帧,
df <- do.call(rbind, li),并在不循环的情况下运行facet_wrap。