本教程所用数据可在 美国国家环境信息中心(NCEI)获取。NCEI 是美国环境数据的权威机构,提供关于气候、生态系统和水资源的高质量数据。GSOY(Global Summary of the Year)数据集按城市和气象站提供历史气象数据。本教程将使用加利福尼亚州伯克利的数据。您也可以选择自己偏好的城市。
summary(df) DATE TAVG Min. :1893 Min. :12.901st Qu.:19261st Qu.:13.50 Median :1956 Median :13.91 Mean :1956 Mean :13.973rd Qu.:19853rd Qu.:14.33 Max. :2019 Max. :15.93NA's :33技术支持
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size =7, alpha =0.8)+scale_color_gradient(name ="ºC", low ="#47BEFB", high ="#ED6AA8")+ggtitle("Historical air temperature trend in Berkeley, CA")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")技术支持
Edward Tufte 是数据可视化领域的专家,主张最大化用于呈现非冗余数据的“墨水”比例。作者认为,这样可以让图形更清晰,避免分散读者注意力。
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size =7, alpha =0.8)+scale_color_gradient(name ="ºC", low ="#47BEFB", high ="#ED6AA8")+ggtitle("Historical air temperature trend in Berkeley, CA")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme(# Eliminates grids: panel.grid.minor = element_blank(), panel.grid.major = element_blank())技术支持
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size =7, alpha =0.8)+scale_color_gradient(name ="ºC", low = datacamp_colors$blue, high = datacamp_colors$pink)+ggtitle("Historical air temperature trend in Berkeley, CA")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme_datacamp(text_panel_color = datacamp_colors$green, background_color = datacamp_colors$darkblue)技术支持
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size =7, alpha =0.8)+geom_smooth(color = datacamp_colors$green, se =FALSE)+scale_color_gradient(name ="ºC", low = datacamp_colors$blue, high = datacamp_colors$pink)+ggtitle("Historical air temperature trend in Berkeley, CA", subtitle ="Visualization using theme_datacamp()")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme_datacamp(text_panel_color = datacamp_colors$green, background_color = datacamp_colors$darkblue)技术支持
ggplot(data = df, aes(x = DATE, y = TAVG, color = TAVG))+geom_point(size =7, alpha =0.8)+geom_smooth(color ="white", se =FALSE)+scale_color_gradient(name ="ºC", low = datacamp_colors$blue, high = datacamp_colors$pink)+ggtitle("Historical air temperature trend in Berkeley, CA", subtitle ="Visualization using theme_datacamp()")+xlab("Year")+ylab("Annual Mean Temperature in Berkeley [ºC]")+theme_datacamp(text_panel_color ="white", background_color = datacamp_colors$darkblue)技术支持
结语
在本教程中,您学习了如何在 R 中使用 ggplot2 高效地可视化历史气候数据。我们涵盖了从获取可靠数据到创建自定义 ggplot2 主题的全过程,帮助您用数据可视化提升人们对气候变化的认知。
本教程由我们的社区贡献,已由 DataCamp 为确保清晰与准确进行编辑。
有兴趣分享您的专业经验吗?我们非常期待!欢迎通过我们的 社区投稿表单提交您的文章或想法。
“全球变暖不是预测,它正在发生”——James Hansen
气候变化是影响我们所有人的紧迫议题,数据可视化是提升认知的有力工具。在本分步教程中,您将学习如何在 R 中使用 ggplot2 创建对历史气候数据具有影响力的可视化。读完本指南,您将知道如何查找精选数据集、绘制历史气象数据,并自定义图形来讲述一个有说服力的故事。
气候变化是影响我们所有人的紧迫议题,数据可视化是提升认知的有力工具。在本分步教程中,您将学习如何在 R 中使用 ggplot2 创建对历史气候数据具有影响力的可视化。读完本指南,您将知道如何查找精选数据集、绘制历史气象数据,并自定义图形来讲述一个有说服力的故事。
在本教程中,您将了解去哪里可以找到可靠且经过整理的历史气温数据,并用 ggplot2 对其进行可视化。
步骤 1:查找并加载数据
本教程所用数据可在 美国国家环境信息中心(NCEI)获取。NCEI 是美国环境数据的权威机构,提供关于气候、生态系统和水资源的高质量数据。GSOY(Global Summary of the Year)数据集按城市和气象站提供历史气象数据。本教程将使用加利福尼亚州伯克利的数据。您也可以选择自己偏好的城市。
我们将使用
read_csv加载数据。第一个参数是文件路径,第二个参数col_select用于告诉 R 您要加载哪些列。注意该数据集包含多个变量,但我们只关心 “DATE” 和 “TAVG”。“DATE” 表示观测年份,“TAVG” 是以摄氏度给出的年平均气温。关于可用变量的更多信息,请参阅数据集代码手册。下面我们将打印数据集及其汇总统计,以便对数据有初步了解。R 的
summary()函数告诉我们,数据范围从 1893 年到 2019 年,在此期间伯克利(加州)观测到的最低年平均气温为 12.9 °C,最高年平均气温为 15.93 °C。步骤 2:处理缺失值
summary()函数显示有 33 个缺失气温值。您也可以使用is.na()函数检查某个变量中的 NA;当观测为 NA 时返回 TRUE。随后可将所有缺失值求和。sum()会将 TRUE 转换为 1。鉴于我们正在处理时间序列,将使用线性插值填补缺失值。该方法假定在缺失期间数据线性变化。事实上,当您用折线图绘制时间序列时,即便没有缺失值,观测点之间的区间也同样由连接两点的直线填充。
为进行线性插值,我们将使用 imputeTS 包。安装并加载库后,可使用
na_interpolation()填补缺失值。它接收两个参数:首先是您要处理的数据框列,其次是用于插补的方法。步骤 3:绘制第一版图形
ggplot2 可视化由多个图层构成。如下图所示,每个图层包含一个几何对象(geom),即您在图中看到的一个元素(例如线或点)。
首先,您需要向 ggplot() 函数传入一个数据集。其次,您将变量映射到美学属性——即几何对象的可视属性。例如在 y 轴位置、x 轴位置、颜色或大小等。想进一步了解 ggplot,请查看由 Rick Scavetta 讲授的“使用 ggplot2 进行数据可视化入门”课程,我从他那里学到了很多可视化技能。
ggplot2 图层。图片由作者绘制。
下面,我们的映射(
aes())告诉 ggplot:x 轴位置取决于变量 “DATE”,y 轴位置取决于温度。请注意,如果只绘制这一图层,ggplot 只会显示坐标轴。此外,在开始使用 ggplot 之前,我们将设置一些应用于所有图形的全局配置。第一项是图形大小与分辨率;第二项是主题。
现在,您可以添加第二个图层,用点表示各年的气温。注意,您可以在上一步创建的图形上叠加该图层。
最后,您可以再添加第三个包含折线的图层。需要强调的是,有些作者认为折线并不代表观测数据,应谨慎使用。有关完整讨论,请参阅 Claus O. Wilke 的《数据可视化基础》第 13 章。
步骤 4:自定义图形
本节将介绍如何自定义图形,使其清晰、信息量足且美观。
首先,为使气温上升趋势更直观,我们将把点的颜色美学也映射到 “TAVG”。由于它是数值变量,ggplot2 会使用渐变色来表示连续取值。您可以通过
scale_color_gradient()选择代表低温与高温的颜色。此外,您可以分别使用
xlab()和ylab()设置 x、y 轴标签,用ggtitle()添加标题。最后,我们将增大点的大小并设置透明度,以便在重叠处仍能看清数据。Edward Tufte 是数据可视化领域的专家,主张最大化用于呈现非冗余数据的“墨水”比例。作者认为,这样可以让图形更清晰,避免分散读者注意力。
我们使用的 ggplot2 主题(
theme_bw())已与 Tufte 的建议大体一致,但在上图中我们仍可移除面板网格。为此,使用theme()函数,并传入panel.grid.minor = element_blank()与panel.grid.major = element_blank()两个参数。步骤 5:为可视化创建一个 ggplot2 主题
现在,您将学习如何创建自己的 ggplot2 主题。作为示例,我们将创建一个
theme_datacamp(),使图形更符合 DataCamp 网站的风格与和谐度。首先,我们创建了一个包含部分 DataCamp 配色的列表,便于后续使用。
其次,我们将加载名为 “Manjari” 的 Google 字体以在主题中使用。您可以通过 “showtext” 包轻松加载。如果尚未安装,请先安装该包。
下面我们加载该包,并用
font_add_google()加载 “Manjari”。同时用showtext_auto()告诉 R 使用 “showtext” 来渲染文本:现在,我们将使用
theme()自定义图形。下图展示了可用的部分参数。完整列表请参阅ggplot2 参考文档。主题参数。图片由作者绘制。
您可以通过一个函数来创建新主题,在其中调用 ggplot2 的
theme()并填入自定义规格。注意我们以黑白主题(theme_bw())为基础,然后移除网格并更改背景、面板和文本颜色。此外,为图形添加了 0.5 厘米外边距。为便于后续修改,我们为用户提供了两个参数,用于指定文本/面板颜色与背景颜色。现在,您只需将
theme_datacamp()添加到图形中,并指定您偏好的颜色。这里我使用了 Datacamp 配色:最后,您可以按 Claus O. Wilke 在《数据可视化基础》第 14 章中的推荐,使用 LOESS(局部加权回归平滑)曲线展示温度趋势。方法是在 ggplot 中添加包含
geom_smooth()的图层。欢迎尝试其他颜色与字体组合,打造更具表现力的可视化。比如下方示例中,我将 LOESS 曲线、面板与文字颜色改为白色。
结语
在本教程中,您学习了如何在 R 中使用 ggplot2 高效地可视化历史气候数据。我们涵盖了从获取可靠数据到创建自定义 ggplot2 主题的全过程,帮助您用数据可视化提升人们对气候变化的认知。
下一步,建议继续深入学习数据可视化与 R 编程,参阅 DataCamp 的使用 ggplot2 进行数据可视化入门与中级 R课程。这些课程将帮助您在此基础上再进阶,应对更复杂的项目。