применить ggplot к нескольким столбцам и сохранить несколько выходных данных для построения графиков

#r #ggplot2

#r #ggplot2

Вопрос:

Я хочу создать и сохранить отдельный график для каждого столбца в dataframe (df).

Справочная информация: мой df называется final_fam_beliefs_percs с использованием R с использованием ggplot

До сих пор мне удавалось создать функцию построения графиков с помощью ggplot и использовать «lapply» для применения функции к каждому столбцу. Смотрите следующий код:

 graph_outputs <- lapply(final_fam_beliefs_percs, function(i) ggplot(final_fam_beliefs_percs, aes(x=location, y=as.numeric(i), fill=response))  
             geom_bar(stat="identity", position=position_dodge())  
             geom_text(aes(label=i), position=position_dodge(width=0.9), vjust=-0.25)  
             labs(x= "location", y="percentage"))
  

приведенная выше ссылка на вывод графика кода для одного из столбцов df

Теперь я хотел бы сохранить каждый график в виде отдельных файлов png. Я пробовал приведенный ниже код, однако, когда мои графики печатаются, они больше не содержат данных.

 var_list= colnames(final_fam_beliefs_percs)
for (i in var_list) {
  plots = ggplot(final_fam_beliefs_percs, aes(x=location, y=as.numeric(i), fill=response))  
    geom_bar(stat="identity", position=position_dodge())  
    geom_text(aes(label=i), position=position_dodge(width=0.9), vjust=-0.25)  
    labs(x= "location", y="percentage")   ggtitle(i)

  ggsave(plots, file=paste0("rr_",i,".png"))
}
  

Я считаю, что мне нужно изменить оператор y=as.numeric(i) или использовать какой-либо другой метод отображения.

Комментарии:

1. Я думаю, вы ищете ?aes_ или ?aes_string .

2. @Axeman прав. Вы бы заменили свой aes() вызов на aes_string(x='location', y=i, fill='response') , чтобы все аргументы были символьными.

3. Извините, но это все еще не работает.

4. Я начинаю с создания списка имен столбцов …. i представляет имя каждого столбца… y = i использует только имя столбца, но не фактические данные в имени столбца

5. Ну, мы не можем воспроизвести это, поэтому очень сложно помочь. Проблема, которую вы описываете, i как строка, ссылающаяся только на имя столбца, — это именно то, с чем aes_string предполагается иметь дело. Как бы то ни было, вы также можете просто включить его ggsave в свой lapply вызов, если это действительно работает (хотя использование векторов в качестве прямого ввода в aes обычно не рекомендуется). Цикл for должен выполнять то же самое, что и lapply, если вы указываете as.numeric(final_fam_beliefs_percs[[i]]) вместо as.numeric(i) . (Но, опять же, aes_string или aes_ являются правильными способами сделать это.)