如何在R语言中按列绘制箱线图?
没问题!我来一步步教你在R里用你的天气数据集绘制箱线图,分基础R和ggplot2两种常用方法,覆盖不同的需求场景:
第一步:整理你的数据集
你提供的原始数据格式有点混乱,先把它转换成R能识别的数据框。我先帮你提取并构造了示例数据集(匹配你给出的前15行数据):
# 构造匹配你数据的示例数据集 weather_data <- data.frame( year = rep(1961:1962, each = 12)[1:15], month = rep(1:12, 2)[1:15], t.max = c(6.1, 9.9, 13.1, 13.9, 15.1, 19.8, 19.3, 19.9, 19.7, 14.5, 9.2, 4.9, 7.4, 7.4, 6.4), t.min = c(0.5, 3.8, 3.3, 5.8, 5.4, 8.7, 10.3, 10.8, 10.2, 6.6, 2.7, -1.2, 0.5, 1.1, -1.7), frost = c(13, 1, 2, 0, 3, 0, 0, 0, 0, 1, 6, 19, 8, 10, 21), rain = c(320, 210, 390, 411, 69, 84, 281, 413, 152, 260, 238, 429, 290, 66, 131) )
如果你的原始数据是存放在CSV文件里,也可以用read.csv("your_file.csv")直接导入。
方法1:用基础R绘制箱线图
基础R的boxplot()函数简单直接,适合快速可视化:
场景1:绘制所有数值列的箱线图
一次性展示t.max、t.min、frost、rain这几个变量的整体分布:
boxplot(weather_data[, c("t.max", "t.min", "frost", "rain")], main = "箱线图:天气变量分布", ylab = "数值", col = "lightblue", las = 1) # 让y轴标签横向显示,更易读
场景2:按分类列分组绘制
比如按年份分组看最高气温的分布,或者按月份分组看降雨量的分布:
# 按年份分组绘制最高气温箱线图 boxplot(t.max ~ year, data = weather_data, main = "各年份最高气温分布", xlab = "年份", ylab = "最高气温(°C)", col = "lightgreen") # 按月份分组绘制降雨量箱线图 boxplot(rain ~ month, data = weather_data, main = "各月份降雨量分布", xlab = "月份", ylab = "降雨量", col = "lightcoral")
方法2:用ggplot2绘制箱线图
ggplot2能绘制更美观、灵活的可视化,需要先安装并加载包:
# 首次使用先安装包 # install.packages("ggplot2") # install.packages("tidyr") # 用于数据格式转换 library(ggplot2) library(tidyr)
场景1:多变量箱线图(长格式数据)
先把宽格式数据转换成长格式,方便同时展示多个变量:
# 转换为长格式数据 weather_long <- pivot_longer(weather_data, cols = c(t.max, t.min, frost, rain), names_to = "变量名称", values_to = "数值") # 绘制多变量箱线图 ggplot(weather_long, aes(x = 变量名称, y = 数值)) + geom_boxplot(fill = "lightblue", alpha = 0.7) + labs(title = "天气变量分布箱线图", x = "变量", y = "数值") + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
场景2:按分类分组的多面箱线图
比如按年份分组,分别展示每个变量的分布:
ggplot(weather_long, aes(x = 变量名称, y = 数值)) + geom_boxplot(fill = "lightgreen", alpha = 0.7) + facet_wrap(~ year) + # 按年份分面 labs(title = "各年份天气变量分布", x = "变量", y = "数值") + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
小技巧:处理缺失值
如果你的数据里有NA,可以用na.omit()先清理数据,避免绘图时出错:
# 清理含NA的行 weather_clean <- na.omit(weather_data) # 用清理后的数据绘图即可
内容的提问来源于stack exchange,提问作者user3742334
相关产品推荐
相关产品推荐

