【问题标题】:Why i cant use "i" value of for loops in ggplot graphs?为什么我不能在 ggplot 图中使用 for 循环的“i”值?
【发布时间】:2020-02-22 08:29:26
【问题描述】:

我有一个布尔数据集data set

我正在尝试获取每列的条形图。我可以手动完成 例如: ggplot(data=data14)+ geom_bar(aes(x=data14$X35,fill=X35))

这可以工作,但如果我尝试使用 for 循环它就不能工作

for (i in colnames(data14)){  plot[i] <-ggplot(data=data14)+geom_bar(aes(x=i,fill=i)) }

我想将所有绘图发送到 plot1,plot2... 值。

我尝试手动进行测试。例如:

    i="X1"
ggplot(data=data14)+
geom_bar(aes(x=i,fill=i))

对于这个代码 R 给我这个图表:graph

如何在 ggplot 图中设置 for 循环的“i”值?

【问题讨论】:

  • 你应该初始化情节(顺便说一句)。也许使用列表?
  • 请提供dput(head(df,n))的数据,而不是图片。
  • 以长格式输入数据并将代码更改为ggplot(data = data14 %&gt;% filter(Key == i), aes(x = Key, y = value)) 也可以。但是没有循环的@NelsonGon 答案要好得多。
  • 或者你可以使用aes_string

标签: r loops ggplot2 bar-chart


【解决方案1】:

使用 iris 实现可重复性的无循环解决方案:

library(dplyr)
library(ggplot2)
my_plots<-Map(function(x) ggplot(data=iris, aes(x=!!sym(x),
                                 fill=!!sym(x)))+
        geom_bar(), colnames(iris))

结果(第五张图):

my_plots[[5]]

注意事项

  1. 据我所知,使用fill 需要factors,这就是为什么该解决方案中只有第五个图实际上有彩条的原因。

【讨论】:

    【解决方案2】:

    你的循环不能与aes()一起工作的问题是你必须在这种情况下使用aes_string,就像这样:

    attach(iris)
    
    for(i in names(iris)[-5]){
      print(ggplot(data=iris) + geom_bar(aes_string(x=i,fill=i)))
    }
    

    但是,请注意,此解决方案不是最佳解决方案,您应该按照 NelsonGon 的建议进行操作。你能举例说明你想要的情节应该是什么样子吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2011-05-21
      • 2022-12-06
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多