Как добавить легенду в ggplot, когда значения aes постоянны для stat_smooth - PullRequest
0 голосов
/ 12 июня 2019

Я пытался построить разные сглаживания на одном графике:

ggplot(mtcars, aes(x=wt, y = mpg, col="green")) + 
  geom_point(col='blue') +
  stat_smooth(method='loess',linetype="dashed", col="red", span=0.1) +
  labs(title = "Fitting Price ~ living space, span=0.1,0.25,0.5,0.75") +
  stat_smooth(method='loess',linetype="dashed", col="cyan", span=0.25) +
  stat_smooth(method='loess',linetype="dashed", col="green", span=0.5) +
  stat_smooth(method='loess',linetype="dashed", col="blue", span=0.75) 

Я хочу добавить к нему легенду, в которой будет показан цвет каждой линии сглаживания. В некоторых ответах говорится о добавлении цвета к aes, однако у меня нет отдельного aes для каждого stat_smooth, и добавление col к aes из ggplot не имеет никакого эффекта.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Я не знаю, как добавить легенду из слоев, созданных в вызове ggplot.Альтернативой является предварительное вычисление сглаживаний и подача их в ggplot в полной форме.

Здесь я определяю функцию для построения подобранной кривой Лёсса на основе входного диапазона, а затем увеличиваю mtcars несколькими из них,затем соберите в аккуратную (длинную) форму и вставьте в ggplot:

make_loess <- function(span = 0.1) {
  series = paste("Loess with span =", span)
  loess(mpg ~ wt, mtcars, span = span) %>%
    broom::augment() %>%
    select(rowname = .rownames, !!series := .fitted)
}

mtcars %>%
  rownames_to_column() %>%
  left_join(make_loess(0.25)) %>%
  left_join(make_loess(0.50)) %>%
  left_join(make_loess(0.75)) %>%
  gather(series, val, -c(rowname:carb)) %>%
  ggplot(aes(wt, val, color = series, group = series)) +
    geom_line()

enter image description here

0 голосов
/ 12 июня 2019

Вы все еще можете использовать aes в каждом stat_smooth, включая только нужный цвет. Это добавит легенды к сюжету. Затем вы можете использовать scale_color_identity для сопоставления и переименования цветов

ggplot(mtcars, aes(x=wt, y = mpg, col="green")) + 
  geom_point(col='blue') +
  stat_smooth(method='loess',linetype="dashed", aes(color = "red"), span=0.1) +
  stat_smooth(method='loess',linetype="dashed", aes(color = "orange"), span=0.25) +
  stat_smooth(method='loess',linetype="dashed", aes(color = "yellow"), span=0.5) +
  stat_smooth(method='loess',linetype="dashed", aes(color = "green"), span=0.75) +
  labs(title = "Fitting Price ~ living space, span=0.1, 0.25, 0.5, 0.75") +
  scale_color_identity(name = "Span values",
                          breaks = c("red", "orange", "yellow", "green"),
                          labels = c("0.1", "0.25", "0.5", "0.75"),
                          guide = "legend")

Подробнее на Создание легенд, когда эстетика является константой в ggplot2

...