R - 折线图
R - 使用 ggplot2 绘制现代折线图
Section titled “R - 使用 ggplot2 绘制现代折线图”折线图是可视化数据随时间或其他连续序列变化的趋势的理想选择。虽然 R 基础包(base R)中提供了 plot() 函数,但要在 R 中创建复杂且达到出版质量的图形,现代化、功能强大且推荐的方法是使用 ggplot2 包。
ggplot2 基于图形语法(Grammar of Graphics),这是一种将图表分解为数据、美学映射(aesthetic mappings)和几何图层(geometric layers)等组成部分的理念。这使其成为一个系统化且灵活的可视化工具。
创建简单折线图
Section titled “创建简单折线图”要使用 ggplot2 创建图表,你需要三个关键组件:
ggplot():主函数,用于指定数据集。aes():美学映射(aesthetic mappings),定义数据中的变量如何映射到视觉属性(如 x 轴、y 轴、颜色等)。- 几何图层(
geomlayer):定义图表类型的几何对象(例如,geom_line()用于折线图,geom_point()用于散点图)。
# 首先,安装并加载 ggplot2 包(它是 tidyverse 的一部分)# install.packages("tidyverse")library(ggplot2)
# 创建一些示例数据:月降雨量(单位:毫米)monthly_data <- data.frame( month = 1:12, rainfall_mm = c(7, 12, 28, 45, 80, 55, 30, 25, 15, 10, 8, 5))
# 创建图表ggplot(data = monthly_data, mapping = aes(x = month, y = rainfall_mm)) + geom_line()这段代码生成一个简单的折线图。x 轴代表月份(从 1 到 12),y 轴显示相应的降雨量。一条线按顺序连接所有数据点。
自定义图表:标题、标签和颜色
Section titled “自定义图表:标题、标签和颜色”你可以通过添加更多图层轻松自定义你的图表。labs() 函数用于添加标题和轴标签。要改变几何对象(geom)的显示效果,你需要将其属性(如 color 或 size)设置在 aes() 函数之外。
ggplot(data = monthly_data, mapping = aes(x = month, y = rainfall_mm)) + geom_line(color = "steelblue", size = 1.5) + # 设置静态颜色和大小 geom_point(color = "steelblue", size = 3) + # 在线上添加点 labs( title = "Monthly Rainfall in Fictional City", subtitle = "A seasonal trend is visible", x = "Month of the Year", y = "Rainfall (mm)", caption = "Source: Fictional Weather Service" ) + theme_minimal() # 应用简洁主题这段代码生成一个更加精美的图表。折线和点都采用了令人愉悦的“steelblue”蓝色。图表具有清晰的标题、副标题、信息丰富的轴标签和图注。theme_minimal() 函数为图表赋予了简洁、现代的外观。
绘制多条折线
Section titled “绘制多条折线”使用 ggplot2 绘制多条折线的方式不是逐一添加,而是将数据中的一个分类变量映射到颜色美学(color aesthetic)。这要求你的数据采用“长格式”(long format)或“整洁格式”(tidy format),即每个观测值都有自己的行。
让我们比较两个不同城市的降雨量。首先,我们将创建数据,然后使用 tidyr::pivot_longer() 来重塑它。
library(tidyr)
# 两个城市的“宽格式”数据wide_data <- data.frame( month = 1:12, city_a_rainfall = c(7, 12, 28, 45, 80, 55, 30, 25, 15, 10, 8, 5), city_b_rainfall = c(90, 85, 60, 40, 25, 15, 10, 12, 20, 35, 65, 80))
# 将数据重塑为“长格式”long_data <- wide_data %>% pivot_longer( cols = c(city_a_rainfall, city_b_rainfall), # 需要进行透视的列 names_to = "city", # 用于存储原始列名的新列 values_to = "rainfall" # 用于存储原始值的新列 )
# 现在,通过将 'city' 列映射到颜色美学来创建图表ggplot(data = long_data, mapping = aes(x = month, y = rainfall, color = city)) + geom_line(size = 1) + labs( title = "Monthly Rainfall Comparison", x = "Month", y = "Rainfall (mm)", color = "City" # 这会重命名图例标题 ) + theme_light()这段代码生成一个包含两条不同折线的图表,每条代表一个城市。ggplot2 会自动为每条线分配不同的颜色,并创建一个图例来标识哪种颜色对应哪个城市。这种方法具有高度可扩展性——如果你有十个城市,同样的代码将生成一个包含十条折线的图表。
保存 ggplot 图表的最佳方法是使用 ggsave() 函数。它会自动根据文件扩展名(例如 .png、.pdf、.svg)检测文件类型,并保存你最后显示的图表。
# 这会将最后显示的图表保存为名为 'rainfall_comparison.png' 的文件# ggsave("rainfall_comparison.png", width = 8, height = 5)