#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_
являются правильными способами сделать это.)