Точечная диаграмма с ggplot, использующая индексацию для построения подмножеств одной и той же переменной по осям x и y

#r #ggplot2

#ggplot2 #индексация #подмножество #точечная диаграмма #разброс

Вопрос:

Я работаю с подмножеством данных о погоде для загруженных данных метрополитена Хитроу. Этот набор данных не содержит пропущенных значений.

Используя ggplot, я хотел бы создать точечную диаграмму для максимальной температуры (tmax) для Хитроу, с данными за 2018 год, построенными на основе данных за 2019 год (см., Например, Ниже). Существует 12 точек данных как за 2018, так и за 2019 годы.

Я попытался сделать это с помощью приведенного ниже, однако это не работает. По-видимому, это связано с индексированием, поскольку код отлично работает, когда не пытается использовать индексы в функции aes ().

Как я могу заставить это работать?

 2018Index lt;- which(HeathrowData$Year == 2018)  2019Index lt;- which(HeathrowData$Year == 2019)   scatterlt;-ggplot(HeathrowData, aes(tmax[2018Index], tmax[2019Index])) scatter   geom_point() scatter   geom_point(size = 2)   labs(x = "2018", y = "2019"))  

введите описание изображения здесь

Ответ №1:

Поскольку ваши данные в длинном формате, вам нужно немного поспорить с данными, чтобы поместить значения за ваши годы в отдельные столбцы, иначе говоря, вам нужно изменить формат ваших данных на широкий:

Используя некоторые случайные поддельные данные:

 library(dplyr) library(tidyr) library(ggplot2)  # Example data set.seed(123)  HeathrowData lt;- data.frame(  Year = rep(2017:2019, each = 12),  tmax = runif(36) )  # Select, Filter, Convert to Wide HeathrowData lt;- HeathrowData %gt;%   select(Year, tmax) %gt;%   filter(Year %in% c(2018, 2019)) %gt;%   group_by(Year) %gt;%   mutate(id = row_number()) %gt;%   ungroup() %gt;%   pivot_wider(names_from = Year, values_from = tmax, names_prefix = "y")  ggplot(HeathrowData, aes(y2018, y2019))    geom_point(size = 2)    labs(x = "2018", y = "2019")