Я пытаюсь сгенерировать серию диаграмм ребристых линий из набора данных, отфильтрованного в соответствии с циклом for.
# create list object to hold charts
print_list=list()
# loop through dataset and create charts based on facility type
for (i in data$fac_type) {
data_filter <- filter(data, fac_type == i)
plot <- ggplot(data=data_filter,aes(x=average,y=category, fill=category)) +
scale_fill_manual(values= cols) +
geom_density_ridges(
rel_min_height=0.01,scale=0.9,
jittered_points = TRUE,
position=position_points_jitter(width=0.05, height=0),point_shape="|",point_size=2,point_alpha=0.7, alpha=0.7) +
theme_ridges() +
theme(legend.position="none",axis.text.y = element_text(angle=45, hjust=1)) +
stat_density_ridges(quantile_lines = TRUE,alpha=0.7,scale=0.9,quantiles=2) +
scale_x_continuous(limits=c(0,1),labels = scales::percent) +
facet_wrap(~season)
print_list[[i]] = plot
}
# print the charts from the list
for (i in data$fac_type) {
data_filter <- filter(data, fac_type == i)
filename=paste("./Charts/National - ",data_filter$fac_type,".jpeg",sep="")
jpeg(filename,width=9,height=7,units="in",bg="white",quality=1,res=300,type=c("quartz"))
print(print_list[[i]])
dev.off()
}
Когда я запускаю вышеупомянутое без facet_wrap
, я получаю счастливые сообщения о перехвате данных "Picking joint bandwidth of 0.0182"
и совершенно прекрасные графики
Рабочая негласная, отфильтрованная диаграмма:
Но реализация facet_wrap дает нулевые наборы данных "Picking joint bandwidth of NaN"
и соответствующие пустые фасеты.
Пустой отфильтрованный, граненый график:
Любопытно, что огранка отлично работает, если я использовал нефильтрованные данные.
Рабочий граненый нефильтрованный график:
Если я вставлю print(data_filter)
в исходный цикл for, он покажет правильно отфильтрованные наборы данных, как показано ниже
Фрагмент отфильтрованных данных:
Поэтому я пришел к выводу, что проблема заключается в том, что facet_wrap каким-то образом искажает данные при перепаковке диаграмм. Тяжелый поиск в Google и поиск переполнения стека не дали никаких подсказок, почему это может быть. Я подозреваю, что это связано с внутренней работой ggplot, в которой я довольно новичок.
Или предложить альтернативный, более элегантный способ сделать это? Мне нужно повторить эту операцию для нескольких наборов данных, поэтому мне нужно масштабируемое решение.
В качестве последнего замечания, я знаю, что, вероятно, более элегантно выполнить вышеизложенное с помощью пользовательских и пользовательских функций & ndash; и открыт для предложений, как. Из-за нехватки времени я сам не смог этого понять.