Почему я не могу использовать значение "i" для циклов в графиках ggplot? - PullRequest
0 голосов
/ 22 февраля 2020

у меня есть логический набор данных набор данных

я пытаюсь получить гистограмму для каждого столбца. Я могу сделать это вручную, например: ggplot(data=data14)+ geom_bar(aes(x=data14$X35,fill=X35))

это работает, но если я попытаюсь с l oop, он не может работать

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

Как я могу установить значение i для моих циклов for в графах ggplot?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Бесплатное решение l oop, в котором для воспроизводимости используется радужная оболочка:

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

ПРИМЕЧАНИЯ

  1. Использование fill требует factor с, насколько я знаю, поэтому только пятый график в этом Решение на самом деле имеет цветные полосы.
1 голос
/ 22 февраля 2020

Проблема, по которой ваш l oop не работает с aes(), заключается в том, что вы должны использовать aes_string в этом случае, например так:

attach(iris)

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

Однако обратите внимание, что это решение не является оптимальным, и вы должны действовать, как предложил NelsonGon. Можете ли вы привести пример того, как должен выглядеть ваш желаемый сюжет?

...