中国地图各省份降雨量数据模拟与可视化
概述
本文档展示如何使用R语言模拟中国各省份的降雨量数据,并在地图上进行可视化展示。
环境准备
安装和加载必要的R包
# 安装必要的包(如果未安装)
packages <- c("ggplot2", "sf", "dplyr", "viridis", "RColorBrewer",
"mapdata", "maps", "readr", "scales")
for(pkg in packages) {
if(!require(pkg, character.only = TRUE)) {
install.packages(pkg)
library(pkg, character.only = TRUE)
}
}
# 如果需要中国地图数据,可能需要安装以下包
# install.packages("chinamap", repos = "https://cran.r-project.org/")
# 或者使用在线资源获取中国地图数据
数据准备
1. 创建中国省份列表和模拟降雨量数据
# 中国34个省级行政区(包括港澳台)
provinces <- c(
"北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省",
"上海市", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省",
"湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆市", "四川省", "贵州省",
"云南省", "西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区", "新疆维吾尔自治区",
"台湾省", "香港特别行政区", "澳门特别行政区"
)
# 设置随机种子以确保结果可重现
set.seed(123)
# 模拟降雨量数据(年降水量,单位:毫米)
# 考虑中国不同地区的气候特点
simulate_rainfall <- function() {
# 南方地区(湿润):800-2000mm
south_provinces <- c("广东省", "广西壮族自治区", "海南省", "福建省", "江西省",
"湖南省", "湖北省", "浙江省", "上海市", "江苏省")
# 西南地区(多雨):600-1500mm
southwest_provinces <- c("四川省", "重庆市", "贵州省", "云南省")
# 北方地区(半干旱):200-800mm
north_provinces <- c("北京市", "天津市", "河北省", "山西省", "内蒙古自治区",
"辽宁省", "吉林省", "黑龙江省", "山东省", "河南省", "安徽省")
# 西北地区(干旱):50-400mm
northwest_provinces <- c("陕西省", "甘肃省", "青海省", "宁夏回族自治区", "新疆维吾尔自治区")
# 高原地区(较少):200-600mm
plateau_provinces <- c("西藏自治区")
# 港澳台:800-2500mm
special_regions <- c("台湾省", "香港特别行政区", "澳门特别行政区")
rainfall_data <- data.frame(
province = provinces,
rainfall = numeric(length(provinces))
)
# 为不同地区分配不同的降雨量范围
for(i in 1:length(provinces)) {
province <- provinces[i]
if(province %in% south_provinces) {
rainfall_data$rainfall[i] <- runif(1, 800, 2000)
} else if(province %in% southwest_provinces) {
rainfall_data$rainfall[i] <- runif(1, 600, 1500)
} else if(province %in% north_provinces) {
rainfall_data$rainfall[i] <- runif(1, 200, 800)
} else if(province %in% northwest_provinces) {
rainfall_data$rainfall[i] <- runif(1, 50, 400)
} else if(province %in% plateau_provinces) {
rainfall_data$rainfall[i] <- runif(1, 200, 600)
} else if(province %in% special_regions) {
rainfall_data$rainfall[i] <- runif(1, 800, 2500)
} else {
rainfall_data$rainfall[i] <- runif(1, 300, 1000) # 默认值
}
}
return(rainfall_data)
}
# 生成模拟数据
rainfall_data <- simulate_rainfall()
# 添加降雨等级分类
rainfall_data <- rainfall_data %>%
mutate(
rainfall_level = case_when(
rainfall < 200 ~ "极少",
rainfall < 400 ~ "较少",
rainfall < 800 ~ "适中",
rainfall < 1200 ~ "丰富",
rainfall < 1600 ~ "很丰富",
TRUE ~ "极丰富"
),
rainfall_level = factor(rainfall_level,
levels = c("极少", "较少", "适中", "丰富", "很丰富", "极丰富"))
)
# 查看数据
print(head(rainfall_data, 10))
2. 创建简化的省份坐标数据
# 由于获取完整的中国地图数据可能较复杂,这里创建一个简化版本
# 包含主要省份的大致坐标位置(用于散点图展示)
province_coords <- data.frame(
province = c("北京市", "天津市", "河北省", "山西省", "内蒙古自治区",
"辽宁省", "吉林省", "黑龙江省", "上海市", "江苏省",
"浙江省", "安徽省", "福建省", "江西省", "山东省",
"河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区",
"海南省", "重庆市", "四川省", "贵州省", "云南省",
"西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区",
"新疆维吾尔自治区"),
longitude = c(116.4, 117.2, 114.5, 112.5, 111.7,
123.4, 125.3, 126.6, 121.5, 118.8,
120.2, 117.3, 119.3, 115.9, 117.0,
113.7, 114.3, 113.0, 113.3, 108.3,
110.3, 106.5, 104.1, 106.7, 102.7,
91.1, 108.9, 103.8, 101.8, 106.3,
87.6),
latitude = c(39.9, 39.1, 38.0, 37.9, 40.8,
41.8, 43.9, 45.8, 31.2, 32.0,
30.3, 31.9, 26.1, 28.7, 36.7,
34.8, 30.6, 28.2, 23.1, 22.8,
20.0, 29.6, 30.7, 26.6, 25.0,
29.7, 34.3, 36.1, 36.6, 38.5,
43.8)
)
# 合并降雨量数据和坐标数据
rainfall_map_data <- merge(rainfall_data, province_coords, by = "province", all.x = TRUE)
数据可视化
1. 基础散点图可视化
# 创建基础的散点图来展示各省份降雨量
p1 <- ggplot(rainfall_map_data, aes(x = longitude, y = latitude)) +
geom_point(aes(size = rainfall, color = rainfall), alpha = 0.7) +
scale_color_viridis_c(name = "年降雨量\n(mm)", option = "plasma") +
scale_size_continuous(name = "年降雨量\n(mm)", range = c(2, 15)) +
labs(
title = "中国各省份年降雨量分布",
subtitle = "基于模拟数据",
x = "经度",
y = "纬度"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12),
legend.position = "right"
)
print(p1)
2. 分类颜色可视化
# 使用降雨等级进行分类可视化
p2 <- ggplot(rainfall_map_data, aes(x = longitude, y = latitude)) +
geom_point(aes(color = rainfall_level, size = rainfall), alpha = 0.8) +
scale_color_brewer(name = "降雨等级", type = "seq", palette = "Blues") +
scale_size_continuous(name = "年降雨量\n(mm)", range = c(3, 12)) +
labs(
title = "中国各省份降雨等级分布",
subtitle = "按降雨量分级着色",
x = "经度",
y = "纬度"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12),
legend.position = "right"
)
print(p2)
3. 添加省份标签
# 添加省份名称标签的可视化
p3 <- ggplot(rainfall_map_data, aes(x = longitude, y = latitude)) +
geom_point(aes(color = rainfall, size = rainfall), alpha = 0.7) +
geom_text(aes(label = substr(province, 1, 2)),
vjust = -1, hjust = 0.5, size = 3, check_overlap = TRUE) +
scale_color_viridis_c(name = "年降雨量\n(mm)", option = "viridis") +
scale_size_continuous(name = "年降雨量\n(mm)", range = c(3, 10)) +
labs(
title = "中国各省份降雨量分布(带标签)",
subtitle = "圆圈大小和颜色表示降雨量",
x = "经度",
y = "纬度"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12),
legend.position = "bottom"
)
print(p3)
数据统计分析
降雨量统计摘要
# 基本统计信息
cat("中国各省份降雨量统计摘要:\n")
summary(rainfall_data$rainfall)
cat("\n按降雨等级分组统计:\n")
table(rainfall_data$rainfall_level)
# 创建统计图表
p4 <- ggplot(rainfall_data, aes(x = rainfall_level, fill = rainfall_level)) +
geom_bar(alpha = 0.8) +
scale_fill_brewer(type = "seq", palette = "Blues") +
labs(
title = "各降雨等级省份数量分布",
x = "降雨等级",
y = "省份数量"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)
)
print(p4)
降雨量分布直方图
# 降雨量分布直方图
p5 <- ggplot(rainfall_data, aes(x = rainfall)) +
geom_histogram(bins = 15, fill = "skyblue", color = "white", alpha = 0.7) +
geom_vline(aes(xintercept = mean(rainfall)),
color = "red", linetype = "dashed", size = 1) +
labs(
title = "中国各省份年降雨量分布直方图",
subtitle = paste("平均降雨量:", round(mean(rainfall_data$rainfall), 1), "mm"),
x = "年降雨量 (mm)",
y = "省份数量"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "red")
)
print(p5)
数据导出
# 保存数据到CSV文件
write.csv(rainfall_data, "中国省份降雨量模拟数据.csv", row.names = FALSE, fileEncoding = "UTF-8")
# 保存带坐标的数据
write.csv(rainfall_map_data, "中国省份降雨量地图数据.csv", row.names = FALSE, fileEncoding = "UTF-8")
cat("数据已保存到CSV文件\n")
专业R语言辅导 | Python编程 | 数据分析 Data analysis | 统计分析 Statistics | 数据挖掘 Data mining | 机器学习 Machine learning | |统计分析 Statistics|STATS 202|STATS 203|STAT 110|STAT 104|STAT 705|STAT 707|STAT4203|STAT4204|STAT4205|STAT4206|STAT 133|STAT 134|STAT 101A|STAT 100A|STAT 581|STAT 520|STAT 521|STAT 4500|STAT 5805|STAT 5806|STAT 4600|STAT30001|STAT3001|STAT3002|STAT3003|STAT3004|STAT3005|STAT3006|STAT5001|STAT5002|STAT5003|STAT5004|
www.rdaima.com
www.daixie.it.com
www.rcodedaixie.com
www.daixie.it.com
注意事项
- 数据说明: 本文档中的降雨量数据为模拟数据,仅用于演示目的,不代表真实的气象数据。
- 地图数据: 由于版权和数据获取的复杂性,本示例使用简化的坐标点来表示省份位置。在实际应用中,建议使用专业的地理信息系统(GIS)数据。
- 改进建议:
- 可以使用真实的气象数据
- 集成完整的中国地图矢量数据
- 添加时间序列分析
- 包含更多气象要素(温度、湿度等)
- 扩展功能:
- 交互式地图(使用leaflet包)
- 动态时间序列可视化
- 与真实气象API集成
结论
本文档展示了如何使用R语言进行地理数据的模拟和可视化。通过合理的数据模拟和多样化的可视化方法,我们可以有效地展示和分析地理空间数据的分布特征。
1285

被折叠的 条评论
为什么被折叠?



