Сглаживание в ggplot
У меня есть этот ggplot
ggplot(dt.1, aes(x=pctOAC,y=NoP, fill=Age)) +
geom_bar(stat="identity",position=position_dodge()) +
geom_smooth(aes(x=pctOAC,y=NoP, colour=Age), se=F, method="loess",show_guide = FALSE,lwd=0.7) +
theme(legend.position=c(.2,0.8))
![enter image description here]()
dt1 <- structure(list(Age = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("o80", "u80"), class = "factor"), NoP = c(47L, 5L, 33L, 98L, 287L, 543L, 516L, 222L, 67L, 14L, 13L, 30L, 1L, 6L, 17L, 30L, 116L, 390L, 612L, 451L, 146L, 52L), pctOAC = c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)), .Names = c("Age", "NoP", "pctOAC"), row.names = c(NA, -22L), class = "data.frame")
Я хотел бы, чтобы гладкие линии были вынуждены лежать выше нуля, возможно, что-то похожее на плотность ядра. Фактически, если я имел базовые данные, я ожидаю, что плотность ядра будет точно, что я хочу, но у меня есть только агрегированные данные. Есть какой-либо способ сделать это? Я попытался использовать разные method=
в geom_smooth
, но небольшой набор данных, кажется, предотвращает это. Я задавался вопросом об использовании stat_function
, но у меня нет большой информации о том, как продолжить поиск подходящей функции для построения.
Ответы
Ответ 1
Другая возможность - использовать method="glm"
с кривой сплайна и связью с журналом (т.е. попробовал method="gam"
, но его автоматическая настройка сложности потребовала слишком большого уменьшения wiggliness:
library(splines)
ggplot(dt.1, aes(x=pctOAC,y=NoP, fill=Age)) +
geom_bar(stat="identity",position=position_dodge()) +
geom_smooth(aes(colour=Age), se=F,
method="glm",
formula=y~ns(x,8),
family=gaussian(link="log"),
show_guide = FALSE,lwd=0.7) +
theme(legend.position=c(.2,0.8))
![enter image description here]()
Ответ 2
Как насчет geom_density()
?
ggplot(dt1, aes(x=pctOAC,y=NoP, colour=Age, fill=Age)) +
geom_bar(stat="identity",position=position_dodge()) +
geom_density(stat="identity", fill=NA) +
theme(legend.position=c(.2,0.8))
![enter image description here]()