Как задать данные, которые сглаживает geom_smooth

#r #ggplot2 #smoothing

#r #ggplot2 #сглаживание

Вопрос:

Это работает точно так, как ожидалось:

 p = qplot(year, temp, data=CETW, geom=c("point", "smooth"))
  

Температура отображается в зависимости от года, используя данные из фрейма данных CETW. Ряд сглажен. Чисто из эстетических соображений я хотел раскрасить теплые температуры, нормальные температуры и холодные температуры. Существует атрибут CETW$classify, значениями которого являются «теплый», «нормальный» и «холодный». Ниже представлены данные в ожидаемых цветах:

 p = qplot(year, temp, data=CETW, colour=classify, geom=c("point", "smooth"))
  

но теперь «гладкая» штуковина решила быть умнее и применила отдельные кривые сглаживания к каждой из трех температур. Это глупо, потому что точек данных слишком мало. Итак, как мне указать smooth сглаживать весь ряд температур, как это было в первом случае? Было бы неплохо увидеть ответ, который использует stat_smooth с method=loess.

В соответствии с запросом я добавляю данные для CETW с помощью dput:

 structure(list(year = 1959:2011, temp = c(4.5, 5.08, 5.73, 3.43, 
1.25, 3.7, 3.8, 4.95, 5.6, 4.2, 3.2, 3.4, 4.55, 5.33, 5.2, 5.5, 
6.03, 5.13, 4.23, 4.75, 2.35, 4.63, 5.35, 3.45, 4.8, 4.35, 3.2, 
3.4, 3.68, 5.55, 6.75, 6.75, 4.25, 5.33, 5.2, 5.43, 5.83, 3.4, 
5.13, 6.55, 5.93, 5.95, 4.65, 5.93, 5.4, 5.48, 5.73, 4.33, 6.63, 
5.75, 4.4, 3.35, 4.03), classify = c("normal", "normal", "normal", 
"normal", "cold", "normal", "normal", "normal", "normal", "normal", 
"cold", "cold", "normal", "normal", "normal", "normal", "warm", 
"normal", "normal", "normal", "cold", "normal", "normal", "normal", 
"normal", "normal", "cold", "cold", "normal", "normal", "warm", 
"warm", "normal", "normal", "normal", "normal", "normal", "cold", 
"normal", "warm", "normal", "normal", "normal", "normal", "normal", 
"normal", "normal", "normal", "warm", "normal", "normal", "cold", 
"normal")), .Names = c("year", "temp", "classify"), row.names = c(NA, 
-53L), class = "data.frame")
  

Комментарии:

1. Не могли бы вы предоставить несколько примеров данных? Попробуйте использовать dput(CETW) .

2. Это не ответ! Учетная запись, с которой был задан вопрос выше, похоже, исчезла. Ответ, данный Рамнатом, прекрасен — большое спасибо.

Ответ №1:

Вы должны использовать ggplot и указывать параметры локально. Вот как это будет работать

 p = ggplot(data = CETW, aes(x = year, y = temp))  
    geom_point(aes(colour = classify))  
    geom_smooth()
  

Здесь вы указываете эстетику цвета только в точечном слое, и, следовательно, geom_smooth не учитывает это и выдает вам только одну строку.

Дайте мне знать, если это сработает

Ответ №2:

Другой способ выполнить предложение @Ramnath — использовать group параметр aes() .

 ggplot(data=CETW, mapping=aes(x=year, y=temp, colour=classify))  
  geom_point()   geom_smooth(aes(group=1))