本节我们使用伯克利气候数据绘制2013年的全球温度变化情况。该数据集包含1749年至2013年全球许多城市的平均温度数据
加载R包
library(tidyverse)
1.删除AverageTemperature中有缺失值的行
df <- read_csv("GlobalLandTemperaturesByCity.csv") %>%
filter(!is.na(AverageTemperature))
日期列dt是字符类型,使用as.Date()将其转换为日期格式。在这里,我们可以使用将年份提取到一个新变量Year中,as.numeric()将年份从日期格式转换为数字
df$dt <- as.Date(df$dt)
df$Year <- as.numeric(format(df$dt, format="%Y")
)
筛选出2013年的数据,对于每个城市每年都会进行几次温度测量使用group_by( )根据城市分组计算平均温度
df2013 <- df %>% filter(Year == 2013) %>% group_by(City) %>%
mutate(mean=mean(AverageTemperature))
纬度和经度以十进制度数给出,N / S指定纬度,E / W来指定经度。出于绘图目的,我们需要将纬度和经度转化为为十进制数,并带有正负号来指定半球。首先,我们使用str_sub( )函数删除最后一个字符,这是纬度或经度字符串的数字部分。然后,我们使用str_extract()查找模式"[aA-zZ]+"来获取字符串的字符部分(N,S,E或W)。现在,纬度和经度的数字部分存储在与(N,S,E或W)不同的变量中,使用ifelse( )为N或E分配正数,为S或W分配负数
df2013$Latitude_num <- as.numeric(str_sub(df2013$Latitude,1,
nchar(df2013$Latitude)-1))
df2013$Longitude_num <- as.numeric(str_sub(df2013$Longitude,1,
nchar(df2013$Longitude)-1))
df2013$Latitude_chr <- (str_extract(df2013$Latitude, "[aA-zZ]+"))
df2013$Longitude_chr <- (str_extract(df2013$Longitude, "[aA-zZ]+"))
df2013 <- within(df2013, {
Lat <- ifelse(Latitude_chr=="N", Latitude_num, -Latitude_num)
Long <- ifelse(Longitude_chr=="E", Longitude_num, -Longitude_num)
})
数据可视化
world <- map_data("world")
ggplot() +
geom_polygon(data = world, aes(x = long, y = lat, group = group),
fill = "lightgray",
colour = "white")+
coord_fixed(1.3)+
geom_point(data=df2013,aes(Longitude_num,Latitude_num,
color = AverageTemperature)) +
geom_jitter() +
labs(x = " ", y = " ", subtitle = "2013") +
theme_minimal() +
scale_color_distiller("Air Temperature",
palette = "Spectral",limit=c(-32, 40))