中国地图各省份降雨量数据模拟与可视化

中国地图各省份降雨量数据模拟与可视化

概述

本文档展示如何使用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(18002000)
    } else if(province %in% southwest_provinces) {
      rainfall_data$rainfall[i] <- runif(16001500)
    } else if(province %in% north_provinces) {
      rainfall_data$rainfall[i] <- runif(1200800)
    } else if(province %in% northwest_provinces) {
      rainfall_data$rainfall[i] <- runif(150400)
    } else if(province %in% plateau_provinces) {
      rainfall_data$rainfall[i] <- runif(1200600)
    } else if(province %in% special_regions) {
      rainfall_data$rainfall[i] <- runif(18002500)
    } else {
      rainfall_data$rainfall[i] <- runif(13001000)  # 默认值
    }
  }
  
  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.4117.2114.5112.5111.7
                123.4125.3126.6121.5118.8,
                120.2117.3119.3115.9117.0,
                113.7114.3113.0113.3108.3,
                110.3106.5104.1106.7102.7,
                91.1108.9103.8101.8106.3,
                87.6),
  latitude = c(39.939.138.037.940.8,
               41.843.945.831.232.0,
               30.331.926.128.736.7,
               34.830.628.223.122.8,
               20.029.630.726.625.0,
               29.734.336.136.638.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(215)) +
  labs(
    title = "中国各省份年降雨量分布",
    subtitle = "基于模拟数据",
    x = "经度",
    y = "纬度"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5size = 16face = "bold"),
    plot.subtitle = element_text(hjust = 0.5size = 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(312)) +
  labs(
    title = "中国各省份降雨等级分布",
    subtitle = "按降雨量分级着色",
    x = "经度"
    y = "纬度"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5size = 16face = "bold"),
    plot.subtitle = element_text(hjust = 0.5size = 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, 12)), 
            vjust = -1hjust = 0.5size = 3check_overlap = TRUE+
  scale_color_viridis_c(name = "年降雨量\n(mm)"option = "viridis"+
  scale_size_continuous(name = "年降雨量\n(mm)"range = c(310)) +
  labs(
    title = "中国各省份降雨量分布(带标签)",
    subtitle = "圆圈大小和颜色表示降雨量",
    x = "经度",
    y = "纬度"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5size = 16face = "bold"),
    plot.subtitle = element_text(hjust = 0.5size = 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.5size = 14face = "bold"),
    legend.position = "none",
    axis.text.x = element_text(angle = 45hjust = 1)
  )

print(p4)

降雨量分布直方图

# 降雨量分布直方图
p5 <- ggplot(rainfall_data, aes(x = rainfall)) +
  geom_histogram(bins = 15fill = "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.5size = 14face = "bold"),
    plot.subtitle = element_text(hjust = 0.5size = 12color = "red")
  )

print(p5)

数据导出

# 保存数据到CSV文件
write.csv(rainfall_data, "中国省份降雨量模拟数据.csv"row.names = FALSEfileEncoding = "UTF-8")

# 保存带坐标的数据
write.csv(rainfall_map_data, "中国省份降雨量地图数据.csv"row.names = FALSEfileEncoding = "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

注意事项

  1. 数据说明: 本文档中的降雨量数据为模拟数据,仅用于演示目的,不代表真实的气象数据。
  2. 地图数据: 由于版权和数据获取的复杂性,本示例使用简化的坐标点来表示省份位置。在实际应用中,建议使用专业的地理信息系统(GIS)数据。
  3. 改进建议:
    • 可以使用真实的气象数据
    • 集成完整的中国地图矢量数据
    • 添加时间序列分析
    • 包含更多气象要素(温度、湿度等)
  4. 扩展功能:
    • 交互式地图(使用leaflet包)
    • 动态时间序列可视化
    • 与真实气象API集成

结论

本文档展示了如何使用R语言进行地理数据的模拟和可视化。通过合理的数据模拟和多样化的可视化方法,我们可以有效地展示和分析地理空间数据的分布特征。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值