实现 ggplot2 多轴图形 - 如何应用辅助 y 轴
想在一张图中比较多个变量吗? 如果您有多个数据,ggplot2 的多轴功能可让您一目了然,轻松实现可视化。
ggplot2 软件包在 如何添加辅助 y 轴,从不同角度分析数据今天,我们将详细讲解每个步骤,让初学者轻松掌握。
为什么在 ggplot2 中需要多个坐标轴?
数据分析 比较单位不同的两个变量例如,当您想在一张图上显示不同性质的数据(如温度和降水量)时,ggplot2 的多轴功能就非常有用。
1. 绘制基本的折线图
首先,让我们用两个数据绘制一个基本的折线图。
加载 # 库
library(ggplot2)
生成 # 示例数据
data <- data.frame(
月份 = 1:12、
温度 = c(2, 3, 5, 9, 14, 18, 21, 20, 15, 10, 5, 3)、
降雨量 = c(30, 40, 45, 55, 60, 75, 80, 70, 50, 45, 35, 30)
)
生成 # 基线图
p <- ggplot(data, aes(x = month)) +
geom_line(aes(y = 温度, color = "温度")) +
geom_line(aes(y = 降雨量,颜色 = "降雨量")) +
labs(title = "月气温和降雨量", x = "月", y = "气温")
p代码说明:
- aes(x = 月份):在 x 轴上设置月份。
- geom_line(aes(y = temperature, color = "Temperature")):将温度数据绘制成折线图并着色。
- geom_line(ase(y = 降雨量,color = "降雨量")):单独添加降水数据。

2. 添加辅助 Y 轴
现在 次 Y 轴将降水量(y 轴)显示为一个单独的轴。
加载 # 库
library(ggplot2)
生成 # 示例数据
data <- data.frame(
月份 = 1:12、
温度 = c(2, 3, 5, 9, 14, 18, 21, 20, 15, 10, 5, 3)、
降雨量 = c(30, 40, 45, 55, 60, 75, 80, 70, 50, 45, 35, 30)
)
应用 # 多轴
p <- ggplot(data, aes(x = month)) +
geom_line(aes(y = 温度, color = "温度")) +
geom_line(aes(y = 降雨量/10, color = "降雨量")) +
scale_y_continuous(name = "温度", sec.axis = sec_axis(~.*10, name = "降雨量")) +
labs(title = "月气温和降雨量", x = "月") +
scale_colour_manual(values = c("Temperature" = "blue", "Rainfall" = "green"))
p代码说明:
- geom_line(aes(y = 降雨量/10, color = "降雨量")):将降水量数据除以 10,转换成与温度相似的范围。
- scale_y_continuous(name="Temperature"",sec.axis=sec_axis(~.*10,name="Rainfall")):将 y 轴一分为二,在右轴上显示降水量,左轴代表温度,右轴代表降水量。
- scale_colour_manual(values = c("Temperature" = "温度","Rainfall" = "绿色")):将温度和降雨量分别染成蓝色和绿色,以提高可读性。

3. 附加示例--完美的 ggplot2 多轴图形
在这个例子中,降水量用柱形表示,温度用直线表示,有效地显示了两个变量之间的关系。通过色彩对比和改进的布局,可以很容易地看出数据中的模式,而专业、时尚的设计也增强了视觉吸引力。
加载 # 库
library(ggplot2)
library(scales)
生成 # 示例数据
data <- data.frame(
月份 = 1:12、
温度 = c(2, 3, 5, 9, 14, 18, 21, 20, 15, 10, 5, 3)、
降雨量 = c(30, 40, 45, 55, 60, 75, 80, 70, 50, 45, 35, 30)
)
# 增强型多轴图形生成
p <- ggplot(data, aes(x = month)) +
geom_col(aes(y = 降雨量, fill = "降雨量"), alpha = 0.5) +
geom_line(aes(y = 温度 * 4, color = "温度"), size = 1.2) +
geom_point(aes(y = 温度 * 4, color = "温度"), size = 3) +
scale_y_continuous(
name = "降雨量(毫米)"、
sec.axis = sec_axis(~./4, name = "Temperature (°C)")
) + +
scale_x_continuous(breaks = 1:12, labels = month.abb) + +
scale_fill_manual(values = c("Rainfall" = "#69b3a2")) +
scale_colour_manual(values = c("Temperature" = "#E69F00")) +
labs(
title = "月气温和降雨量"、
subtitle = "展示全年气候模式"、
x = "月"、
color = ""、
fill = ""
) + Β
theme_minimal() +
theme(
legend.position = "top"、
plot.title = element_text(hjust = 0.5, face = "bold", size = 16)、
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "grey50")、
axis.title = element_text(face = "bold")、
panel.grid.major = element_line(color = "gray90")、
panel.grid.minor = element_blank()
)
p代码说明:
geom_col()条形图:用条形图表示降水量。阿尔法 = 0.5来调整透明度。geom_line()和geom_point()温度:用折线图和点来表示温度。我们将温度值乘以 4,使其比例与降水量相似。scale_y_continuous()注:主 y 轴表示降水量,次 y 轴表示温度。sec.axis = sec_axis(~./4, name = "Temperature (°C)")作为次轴。scale_x_continuous()显示 x 轴标签的月份缩写。scale_fill_manual()和手动缩放颜色( )颜色:为降水和温度分别指定不同的颜色。实验室()设置图表的标题、副标题和坐标轴标签。theme_minimal()应用简洁的默认主题。主题()图例:调整图表的详细样式。我自定义了图例位置、标题样式、网格线等。

总结:使用 ggplot2 多坐标轴比较数据,一目了然!
利用 ggplot2 的多坐标轴功能,您可以在一张图上直观地显示和比较不同单位的数据。 次 Y 轴可以让您更轻松地解读复杂数据,为您的分析锦上添花。
现在,你也可以在一张图表中表示各种数据了。在下一篇文章中,我们将了解 介绍 ggplot2 中的高级主题设置我们会的,敬请期待!




