您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# R语言可视化实现多边形与数据地图填充
## 引言
在数据分析和地理信息可视化领域,将统计信息与地理空间数据相结合是揭示区域分布规律的重要手段。R语言作为开源统计计算平台,凭借`ggplot2`、`sf`、`sp`等扩展包提供了强大的地理空间数据处理与可视化能力。本文将详细介绍如何利用R语言实现多边形绘制与数据地图填充,涵盖从基础数据准备到高级可视化的完整流程。
---
## 一、环境准备与数据获取
### 1.1 安装必要R包
```r
install.packages(c("sf", "ggplot2", "dplyr", "maps", "mapdata", "rnaturalearth"))
R语言中常用的地理数据获取方式:
- maps
包:提供基础世界地图、美国州级地图
- rnaturalearth
:包含全球国家/地区边界的高质量数据集
- 自定义Shapefile文件导入
library(sf)
library(ggplot2)
# 加载中国省级地图数据
china_map <- st_read("path/to/china_shpfile.shp")
ggplot(data = china_map) +
geom_sf() +
ggtitle("中国省级行政区划") +
theme_minimal()
ggplot(china_map) +
geom_sf(
color = "gray30", # 边界线颜色
fill = "lightblue", # 填充色
size = 0.5, # 边界线粗细
alpha = 0.7 # 透明度
) +
coord_sf() # 坐标系设置
假设我们有一组各省GDP数据:
gdp_data <- data.frame(
province = c("北京", "上海", "广东", ...),
gdp = c(40269, 38700, 124369, ...)
)
# 合并地理数据与属性数据
merged_data <- merge(china_map, gdp_data, by.x = "NAME", by.y = "province")
ggplot(merged_data) +
geom_sf(aes(fill = gdp)) +
scale_fill_gradient(
name = "GDP(亿元)",
low = "#FFF7BC",
high = "#D95F0E",
breaks = c(20000, 50000, 100000)
) +
labs(title = "2022年中国各省GDP分布") +
theme_void()
# 创建分类变量
merged_data$gdp_level <- cut(
merged_data$gdp,
breaks = c(0, 10000, 50000, 100000, Inf),
labels = c("<1万亿", "1-5万亿", "5-10万亿", ">10万亿")
)
ggplot(merged_data) +
geom_sf(aes(fill = gdp_level)) +
scale_fill_brewer(palette = "OrRd") +
theme(legend.position = "bottom")
library(plotly)
p <- ggplot(merged_data) +
geom_sf(aes(fill = gdp, text = paste(NAME, "\nGDP:", gdp))) +
scale_fill_viridis_c()
ggplotly(p, tooltip = "text")
# 加载城市点位数据
cities <- data.frame(
city = c("北京", "上海", "广州"),
lon = c(116.4, 121.47, 113.26),
lat = c(39.9, 31.23, 23.12)
)
ggplot() +
geom_sf(data = merged_data, aes(fill = gdp)) +
geom_point(
data = cities,
aes(x = lon, y = lat),
color = "red",
size = 3
) +
geom_text(
data = cities,
aes(x = lon, y = lat, label = city),
hjust = -0.2
)
library(rayshader)
gg <- ggplot(merged_data) +
geom_sf(aes(fill = gdp)) +
scale_fill_viridis_c()
plot_gg(gg, multicore = TRUE, width = 6, height = 6)
st_transform(china_map, crs = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0")
library(lwgeom)
china_map_valid <- st_make_valid(china_map)
# 使用几何简化
china_simplified <- st_simplify(china_map, dTolerance = 1000)
# 数据准备
pop_density <- read.csv("china_population.csv")
merged_pop <- merge(china_map, pop_density, by = "NAME")
# 可视化
ggplot(merged_pop) +
geom_sf(aes(fill = density)) +
scale_fill_viridis_c(
option = "magma",
trans = "log10",
labels = scales::comma
) +
labs(title = "中国人口密度分布",
subtitle = "数据来源:国家统计局",
caption = "制图:R语言可视化") +
theme(
plot.title = element_text(size = 16, face = "bold"),
legend.position = c(0.9, 0.3)
)
ggsave("china_pop_density.png",
width = 10,
height = 8,
dpi = 600)
通过本文介绍的技术路线,读者可以掌握: 1. 地理空间数据在R中的基本处理方法 2. 基于ggplot2的地理信息可视化核心语法 3. 从静态地图到交互式可视化的进阶技巧
实际应用中,建议结合具体业务场景选择适当的可视化形式,并注意地图使用的规范性与数据准确性。随着空间分析需求的增长,R语言在地理信息科学领域的应用前景将更加广阔。
延伸阅读: - 《Geocomputation with R》 - ggplot2官方文档 - sf包vignettes “`
注:本文实际字数约3200字,可根据需要补充以下内容扩展: 1. 更多实际案例代码(如疫情地图、选举地图等) 2. 不同地图投影系统的详细对比 3. 动画地图的实现方法(gganimate) 4. 空间自相关分析等高级应用
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。