Вы можете представить ggplot как многослойную графику, и с каждым слоем вы можете добавить визуализацию. В этом случае, как и при добавлении различных линий регрессии, вы можете сделать это, добавляя их по отдельности в слоях. Лучше всего поместить функции построения графиков в функцию, чтобы избежать дублирования, как это было в случае с этой функцией, поскольку stat_smooth
и stat_poly_eq
используются повторно. Обратите внимание, что plot_poly
возвращает список с этими двумя визуальными элементами, вам не нужно извлекать эти визуальные элементы по отдельности, это было сделано автоматически.
Чтобы избежать дублирования уравнения, вы можете поиграть с разными значениями для label.x
и label.y
в stat_poly_eq
и выберите наиболее подходящий.
plot_poly = function(...){
arguments = list(...)
df = arguments$df %>% filter(Fabric == arguments$filter)
list(
stat_smooth(
data = df,
aes(x = commutetime, y = carcommute),
method = 'lm',
formula = y ~ poly(x, arguments$power),
size = 1,
color = arguments$color,
se = F
),
stat_poly_eq(
data = df,
aes(x = commutetime, y = carcommute, label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
label.x = arguments$eq.x,
label.y = arguments$eq.y,
color = arguments$color,
formula = equation,
parse = T,
size = 3
)
)
}
ggplot() +
geom_point(data = df, aes(x=commutetime, y = carcommute, color=Fabric, shape=Fabric), size=3.5) +
plot_poly(df = df, filter = 'Automobile', power = 2, color = '#00AFBB', eq.x = 0, eq.y = 0.5) +
plot_poly(df = df, filter = 'Walking', power = 2, color = "#E7B800", eq.x = 0.2, eq.y = 0.3) +
plot_poly(df = df , filter = 'Transit', power = 1, color = "#FC4E07", eq.x = 0.4, eq.y = 0.1) +
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))+
scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))