【问题标题】:How to plot the bar plots for each data frames in the list of data frames如何绘制数据框列表中每个数据框的条形图
【发布时间】: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 &lt;- li[[i]] 移动到循环的第一行,并将print(p) 添加到循环的最后一行。最后,将aes 中的所有$ 替换为Range != binRange 列的适当名称。
  • @NelsonGon 即使在遍历列表之后,它也会显示相同的结果。
  • 考虑合并所有数据帧,df &lt;- do.call(rbind, li),并在不循环的情况下运行facet_wrap

标签: r list ggplot2


【解决方案1】:

根据@NelsonGon 第一条评论,您可以映射您的数据框列表:

myPlots &lt;- purrr::map(li, ~ggplot(.x, aes(x = Range, y = wt0)) + geom_bar(stat = "identity"))

这将为您提供 ggplot 对象的列表。您可以通过索引print(myPlots[[1]]) 打印它们,也可以迭代所有它们:

purrr::walk(myPlots, print)

如果您在 RStudio 中,它可能只显示最后一个图,但在查看器窗格的左上角有可用于浏览打印图的箭头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2019-10-18
    相关资源
    最近更新 更多