Использование this dataset, я создал этот график:ggplot2 в R: используйте `geom_ribbon` для затенения в двух различных` geom_smooth` линий
Я хочу, чтобы тени под geom_smooth
линий, например, так:
Я хочу точек только под синей линии или только под розовой линии, чтобы эти цвета, и все под обе линии, чтобы быть темно-серого цвета.
Я использовал этот код для создания графика:
p3 <- ggplot(df, aes(x = SECONDS, y = AGE, color = GENDER)) +
geom_point() + theme_fivethirtyeight_mod() + ggtitle('Seconds vs. Age') +
geom_hline(yintercept = 0, size = 1.2, colour = "#535353") +
geom_vline(xintercept = 0, size = 1.2, colour = "#535353") +
geom_smooth(se = F) +
geom_ribbon(aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1)
Код для theme_fivethirtyeight_mod()
это:
require(ggplot2)
require(ggthemes)
require(ggrepel)
require(grid)
require(gtable)
theme_fivethirtyeight_mod <- function (base_size = 12, base_family = "sans") {
(theme_foundation(base_size = base_size, base_family = base_family) +
theme(line = element_line(colour = "black"),
rect = element_rect(fill = ggthemes_data$fivethirtyeight["ltgray"], linetype = 0, colour = NA),
text = element_text(colour = ggthemes_data$fivethirtyeight["dkgray"]),
axis.text = element_text(size = 11, colour = ggthemes_data$fivethirtyeight["dkgray"], face = "bold"),
axis.ticks = element_blank(),
axis.line = element_blank(),
axis.title = element_text(size = 11, colour = ggthemes_data$fivethirtyeight["dkgray"], face = "bold", vjust = 1.5),
legend.title = element_blank(),
legend.background = element_rect(fill="gray90", size=.5, linetype="dotted"),
legend.position = "bottom",
legend.direction = "horizontal",
legend.box = "vertical",
panel.grid = element_line(colour = NULL),
panel.grid.major = element_line(colour = ggthemes_data$fivethirtyeight["medgray"]),
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0.05, size = rel(1.5), face = "bold"),
plot.margin = unit(c(1, 1, 1, 1), "lines"),
panel.background = element_rect(fill = "#F0F0F0"),
plot.background = element_rect(fill = "#F0F0F0"),
panel.border = element_rect(colour = "#F0F0F0"),
strip.background = element_rect()))
}
Спасибо за помощь!
EDIT:
@MLavoie прокомментировал ссылку на вопрос, который дал мне общее представление о том, как тень под geom_smooth
линий с помощью predict(loess(AGE ~ SECONDS))
. predict()
работает как geom_smooth
, и loess
- это метод, используемый при n < 1000
. Это позволило мне затенять под мужские и женские линии, но не позволил мне найти область под обеими кривыми. Темно-серая затененная область - это область под номером geom_smooth
для всего набора данных.
Я подозреваю, что, чтобы найти область под мужской и женской кривыми, мне сначала нужно было захватить данные с geom_smooth
(мужские и женские). Затем я создавал бы data.frame
с x-значениями в виде строк и столбцом для каждого набора значений y. Я бы нашел минимальное значение y для каждого x-значения, и я бы затенял темно-серый под этой кривой.
Интересно, что затененные области очерчены светло-голубыми, как точки, а в легенде показаны красные или синие наброски, заполненные темно-серым цветом. Я добавил это в код вместо оригинального geom_ribbon
:
geom_ribbon(data = df[df$GENDER == 'F',], aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1, fill = "red") +
geom_ribbon(data = df[df$GENDER == 'M',], aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1, fill = "blue") +
geom_ribbon(aes(ymin = 0, ymax = predict(loess(AGE ~ SECONDS))), alpha = 1)
Это был единственный новый код участвует в создании этого графика:
В сущности, я хочу, чтобы удалить синие контуры из заполненных областей, и я хочу удалить темно-серое заполнение из ящиков в легенде, и если кто-то может понять, как я хотел бы затенять область под обеими линиями. Еще раз спасибо!
это (http://stackoverflow.com/questions/20355849/ggplot2-shade-area-under-density-curve-by-group) может помочь – MLavoie
Единственная проблема заключается в том, что легенда все еще показывает красный или синий коробки с темно-серым интерьером, как в вопросе. Кроме того, контур ленточных областей краснеет для всех из них. Я собираюсь обновить свой вопрос, чтобы сосредоточиться на этих последних проблемах, но спасибо за ссылку! @MLavoie –