为什么我不能在ggplot图中使用for循环的“ i”值?

问题描述 投票:0回答:2

我有一个布尔数据集data set

im试图获取每列的条形图。我可以手动完成例如: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”值?

r loops ggplot2 bar-chart
2个回答
1
投票

使用虹膜实现再现性的无环解决方案:

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]]

enter image description here

NOTES

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

0
投票

为什么循环不能与aes()一起使用的问题是,在这种情况下,您必须使用aes_string,如下所示:

attach(iris)

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

但是,请注意,此解决方案不是最佳解决方案,您应按照NelsonGon的建议进行操作。您能否举一个例子,说明您想要的情节如何?

© www.soinside.com 2019 - 2024. All rights reserved.