首页 > 解决方案 > ¿ 如何创建一个动态 FOR 循环,该循环根据按因子级别分组的数据集打印条形图?

问题描述

我有一个数据框(locs.new),记录了带有放射性标记的鸟类每天飞行的距离。我正在尝试创建一个调用for循环的函数,该循环为第i个麻雀(由字符变量“anillo”标识)创建一个子集,然后使用 xAxis=位置编号(NoFrec)和yAxisDistance 行进(距离)。这是我尝试过的:

   plotDist <- function (x) {
     v<-levels(locs.new$anillo)
     as.vector(v)

     for (i in v) {

       print(i)
       da<-subset(locs.new,anillo==i)
       dat<-subset(da, select = c(NoFrec, Distance))
       plot(dat$NoFrec~ dat$Distance)
       print(ggplot(dat, aes(x=NoFrec, y= Distance))) +geom_col() +    ggtitle(as.character(i))

     }
   }
   plotDist(locs.new)

如果我将代码从 for 循环中分离出来并单独创建每个数据集,它就可以正常工作:

i<-"XEN010"
da<-subset(locs.new,anillo==i)
dat<-subset(da, select = c(NoFrec, Distance))
plot(dat$NoFrec~ dat$Distance)
print(ggplot(dat, aes(x=NoFrec, y= Distance))) +geom_col() + ggtitle(as.character(i))

导致: 在此处输入图像描述, 但是当我在 for 循环中插入此代码时出现问题。它绘制图形......但没有条形并且没有标题。在此先感谢您的任何建议!

标签: rfor-loopbar-chart

解决方案


由于右括号 ) 的位置,您的print语句输出ggplot()对象,即不包括thegeom_colggtitle结果。后两个语句产生你的条和你的标题。在函数之外,这无关紧要。在函数内部,它确实如此。

代替

print(ggplot(dat, aes(x=NoFrec, y=Distance))) + geom_col() + ggtitle(as.character(i))

经过

print(ggplot(dat, aes(x=NoFrec, y=Distance)) + geom_col() + ggtitle(as.character(i)))

然后再试一次?

注意如果问题包含一些样本数据,那将会很有帮助。


推荐阅读