GlobalBurdenR包系列教程(二):世界地图与区域地图绘制
从全球视角到区域聚焦,一行代码绘制出版级别的地图
开篇:为什么GBD研究离不开地图?
在GBD(全球疾病负担)研究中,地图可视化是最直接、最具说服力的展示方式:
- 空间分布一目了然: 哪些国家疾病负担最重?
- 区域差异清晰呈现: SDI分层是否影响疾病模式?
- 政策干预有的放矢: 重点地区的识别
- 论文发表必备图表: Nature/Lancet级别的研究都使用地图
然而,传统方法绘制GBD地图面临许多挑战:
- 国家边界复杂: 例如中国南海九段线、塞尔维亚领土等,需要专业的地图数据
- 配色方案选择困难: 如何选择既符合色盲友好又符合期刊要求的颜色?
- 小地区难以辨认: 如加勒比海、波斯湾国家如何放大展示?
- 代码繁琐: 需要熟悉ggplot2、sf包,学习成本高
GlobalBurdenR包一键解决所有问题!
本文目标
阅读完本文,您将学会:
- 绘制连续变量的世界地图(渐变色)
- 绘制离散分组的世界地图(自定义断点和颜色)
- 自动生成7个重点区域的子地图
- 提取并绘制特定区域的地图(如东南亚、南亚、欧洲等)
- 使用Lancet期刊风格的模板
- 掌握10多个地图函数的使用技巧
本文使用真实的GBD 2023结核病数据,生成8张出版级别的地图!
数据准备
使用第一章处理的数据
setwd('/Users/yuzheng/Documents/GBD数据/2023SDI和pop数据')
library(GlobalBurdenR)
library_required_packages()
# 加载第一章处理好的数据
data <- read.csv('2023TB.csv')
cat("数据加载完成:", nrow(data), "行\n")
# 数据加载完成: 312018 行
筛选地图绘制所需数据
# 筛选2023年、年龄标准化、死亡率数据
dta <- gbd_filter(data,
measure == "Deaths",
age == 'Age-standardized',
year == 2023,
sex == "Both",
metric == 'Rate')
cat("筛选后数据:", nrow(dta), "行\n")
# 筛选后数据: 249 行
数据说明:
249行数据包含204个国家 + 45个地区聚合(如“Global”、“High SDI”、“Southeast Asia”等)
metric == 'Rate'
年龄标准化死亡率(ASMR, Age-Standardized Mortality Rate)
单位: 每10万人
第一部分:世界地图绘制
1.1 连续变量世界地图 (基础款)
适用场景: 展示全球疾病负担的连续分布,适合初步探索数据
map1 <- plot_world_map(dta,
only_large_map = FALSE,
color_palette = "RdYlBu",
legend_name = "ASMR",
plot_title = "Global Tuberculosis Age-Standardized Mortality Rate 2023")
# 保存高分辨率图片
ggsave("world_map_continuous.png", map1, width = 16, height = 10, dpi = 300)
参数详解:
| 参数 | 说明 | 可选值/示例 |
|---|---|---|
|
是否只绘制主地图(不含子地图) | (默认), |
|
颜色方案 | (红黄蓝), (光谱), , |
|
图例标题 | 自定义字符串 |
|
地图标题 | 自定义字符串 |
生成效果:

图表解读:
- 红色区域(高死亡率): 撒哈拉以南非洲国家(>100/10万)
- 黄色区域(中等死亡率): 南亚、东南亚部分国家(10-50/10万)
- 蓝色区域(低死亡率): 西欧、北美、东亚发达国家(<5/10万)
- 自动子地图: 7个重点区域自动放大展示(加勒比海、波斯湾、巴尔干半岛、中国、西非、东地中海、北欧)
- 配色建议:
: 红黄蓝,适合表示“高-中-低”RdYlBu
: 光谱色,适合突出极值Spectral
: 色盲友好,适合灰度打印Viridis
: 黄橙红,适合表示风险递增YlOrRd
1.2 自动分段世界地图 (智能款)
适用场景: 需要将连续数据分组展示,但不确定最佳断点
GlobalBurdenR自动计算最佳断点:
map2 <- plot_auto_world_map_D(dta, n_breaks = 7, color_palette = "RdYlBu",
plot_title = "全球2023年结核病死亡率(7个类别)",
legend_name = "年龄标准化死亡率")
ggsave("world_map_auto_discrete.png", map2, width = 16, height = 10, dpi = 300)
自动分段算法:
基于分位数法,保证每组数据量较为均匀
避免形成空组
运行输出:
使用自动分段,分段数: 7
数值范围: 0.03 ~ 240.59
分段断点: 0.03, 0.31, 1.16, 2.85, 5.99, 26.39, 40.85, 240.59生成效果:

与连续地图的区别:
特性 连续地图 离散地图
颜色变化 平滑过渡 分级显示
数据解读 精确数值对比 分组分类
视觉效果 细腻多样 清晰直观
适用场景 学术研究详细图 政策报告概述图
1.3 手动分段世界地图(自定义款)
适用场景:依据临床意义或政策阈值自定义分组
完全自定义断点和颜色:
# 自定义蓝至红渐变色(8种颜色对应7个分段)
colors <- c('#3182BD', '#6BAED6', '#9ECAE1', # 蓝色系(低风险)
'#FEE5D9', '#FCAE91', '#FB6A4A', # 橙色系(中风险)
'#DE2D26', '#A50F15') # 红色系(高风险)
map3 <- plot_world_map_D(
data = dta,
only_large_map = FALSE,
breaks = c(0, 1, 2, 3, 4, 5, 6, 7), # 自定义断点
labels = c("0-1","1-2","2-3", "3-4", "4-5", "5-6", "6+"), # 自定义标签
color_palette = colors,
legend_name = "年龄标准化死亡率 (/100,000)",
plot_title = "全球2023年结核病死亡率(自定义断点)",
small_titles = c("加勒比海和中美洲",
"波斯湾",
"巴尔干半岛",
"中国",
"西非",
"东地中海",
"北欧"),
small_map_coordinates = list(
c(-92, -60, 5, 27), # 加勒比海和中美洲
c(45, 55, 19, 31), # 波斯湾
c(12, 32, 35, 53), # 巴尔干半岛
c(73.0, 130.0, 3.5, 53.0), # 中国
c(-17, -7, 7, 20), # 西非
c(32, 37, 29, 35), # 东地中海
c(5, 25, 48, 60) # 北欧
))
ggsave("world_map_custom_breaks.png", map3, width = 16, height = 12, dpi = 300)
参数详解:
参数 说明 示例
breaks分段断点(数值向量)
c(0, 1, 2, 3, 4, 5, 6, 7)labels分段标签(字符向量)
c("0-1", "1-2", ...)color_palette颜色向量(长度=labels数量)
c('#3182BD', '#6BAED6', ...)small_titles子地图标题(可选) 字符向量,长度≤7
small_map_coordinates子地图坐标(可选) 列表,每个元素为
c(经度min, 经度max, 纬度min, 纬度max)生成效果:

关键特性:
? 7个子地图,自动排列在主地图周围
? 自定义坐标,精确控制子地图范围
? 颜色完全自定义,满足期刊配色需求
? 标签灵活设置,可使用">100"、"<1"等表达式
??? 配色技巧:
使用ColorBrewer网站(colorbrewer2.org)选择配色方案
考虑色盲友好性(避免红绿组合)
颜色数量=断点数量-1
从浅到深表示从低到高
???? 第二部分:区域地图绘制
2.1 查看所有可用区域
GlobalBurdenR内置了30+个预定义区域:
regions <- gbd_show_all_regions()
print(regions)
输出结果:
可用区域列表:
[1] "Southeast_Asia" "South_Asia"
[3] "East_Asia" "Central_Asia"
[5] "Western_Europe" "Eastern_Europe"
[7] "Southern_Europe" "Northern_Europe"
[9] "North_America" "Latin_America"
[11] "Caribbean" "Middle_East"
[13] "North_Africa" "West_Africa"
[15] "East_Africa" "Central_Africa"
[17] "Southern_Africa" "Oceania"
[19] "baltic_countries" "east_and_south_europe"
[21] "middle_east_north_africa" ...? 提示:区域名称使用下划线命名法,如
Southeast_Asia、Western_Europe2.2 东南亚区域地图
步骤1: 提取东南亚数据
Southeast_Asia <- gbd_extract_region_data(dta, "Southeast_Asia")
cat("东南亚数据:", nrow(Southeast_Asia), "行\n")
# 东南亚数据: 11 行
Southeast_Asia包含的国家:
?????? 泰国(Thailand)
???????? Viet Nam (越南)
???????? Indonesia (印度尼西亚)
???????? Philippines (菲律宾)
???????? Myanmar (缅甸)
???????? Cambodia (柬埔寨)
???????? Lao PDR (老挝)
???????? Malaysia (马来西亚)
???????? Singapore (新加坡)
???????? Brunei (文莱)
???????? Timor-Leste (东帝汶)
步骤2: 制作区域地图
map5 <- plot_auto_world_map_D(
Southeast_Asia,
n_breaks = 7,
color_palette = "RdYlBu",
plot_title = "Southeast Asia TB Mortality Rate 2023",
only_large_map = TRUE,
legend_position = c(0.8, 0.4),
legend_name = "ASMR"
)
ggsave("southeast_asia_map.png", map5, width = 12, height = 10, dpi = 300)
生成效果

图表解读
???? 高负担国家: Myanmar(缅甸), Philippines(菲律宾), Indonesia(印尼)
???? 中等负担: Thailand(泰国), Viet Nam(越南), Cambodia(柬埔寨)
???? 低负担国家: Singapore(新加坡), Brunei(文莱)
2.3 南亚区域地图 (含国家名称)
步骤1: 获取南亚数据
South_Asia <- gbd_extract_region_data(dta, "South_Asia")
cat("南亚数据:", nrow(South_Asia), "行\n")
South_Asia涵盖的国家:
???????? India (印度)
???????? Pakistan (巴基斯坦)
???????? Bangladesh (孟加拉国)
???????? Nepal (尼泊尔)
???????? Sri Lanka (斯里兰卡)
???????? Bhutan (不丹)
???????? Afghanistan (阿富汗)
???????? Maldives (马尔代夫)
步骤2: 制作含国家名称的地图
map6 <- plot_auto_world_map_D(
South_Asia,
n_breaks = 7,
color_palette = "RdYlBu",
plot_title = "South Asia TB Mortality Rate 2023",
only_large_map = TRUE,
legend_position = c(0.8, 0.1),
show_country_names = TRUE,
legend_name = "ASMR"
)
ggsave("south_asia_map_with_names.png", map6, width = 12, height = 10, dpi = 300)
生成效果

show_country_names
参数解释
? 在各国中心位置自动标示国家名称
? 字体尺寸依据国家面积自动调整
? 防止文字重叠
? 适用于报告和教学
2.4 Lancet期刊风格区域地图
GlobalBurdenR内嵌Lancet Public Health (IF≈25) 期刊模板
map7 <- IF25_Lancet_Public_Health_region_map(
data = Southeast_Asia,
countries = unique(Southeast_Asia$location),
auto_bbox = TRUE,
color_scheme = 'RdYlBu',
bbox_expand = 0.15,
region_name = "Southeast Asia",
title = "TB Mortality - Southeast Asia 2023"
)
ggsave("lancet_style_southeast_asia.png", map7, width = 12, height = 10, dpi = 300)
Lancet风格特色
???? 简洁设计: 无边框、大标题、清晰图例
专业配色
: 符合Lancet系列期刊标准
???
自动边界
:
auto_bbox = TRUE自动确定最佳展示范围
???
高清输出
: 适用于直接投稿论文
生成效果
:
2.5 预定义区域地图 (一行代码)
适用场景
: 快速绘制常用区域,无需数据提取
map8 <- plot_world_region_map(
dta,
region = 'east_and_south_europe', # 区域名称
legend_title = 'ASMR',
subtitles = 'Tuberculosis mortality rate, 2023',
main_title = 'Eastern and Southern Europe'
)
ggsave("east_south_europe.png", map8, width = 12, height = 10, dpi = 300)
常用预定义区域
:
区域代码
包含国家
适用场景
east_and_south_europe东欧+南欧
欧洲疾病负担研究
baltic_countries波罗的海三国
小区域比较
middle_east_north_africa中东+北非
MENA地区研究
sub_saharan_africa撒哈拉以南非洲
非洲疾病负担
caribbean加勒比海国家
拉美小岛国研究
生成效果
:
???? 第三部分:配色方案深入解析
3.1 内置配色方案
GlobalBurdenR支持所有
MetBrewer
和
RColorBrewer
配色方案:
推荐配色(按场景)
:
场景
配色方案
特点
效果
发病率/死亡率(低→高)
"YlOrRd"黄→橙→红
直观展示风险递增
双向指标(负→正)
"RdYlBu"红→黄→蓝
强调中间值
多分类变量
"Spectral"光谱色
区分度高
色盲友好
"Viridis"黄绿蓝
灰度打印友好
Nature风格
"Hiroshige"日式配色
艺术感强烈
Lancet风格
"Cassatt2"莫奈印象派
柔和雅致
3.2 自定义配色示例
# 方案1: 绿→黄→红(风险等级)
custom_colors_1 <- c('#1a9850', '#91cf60', '#d9ef8b', '#fee08b', '#fc8d59', '#d73027')
# 方案2: 冷色调(专业风格)
custom_colors_2 <- c('#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45')
# 方案3: 暖色调(警示风格)
custom_colors_3 <- c('#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f')
# 使用自定义配色
map_custom <- plot_world_map(dta,
color_palette = custom_colors_1,
legend_name = "Risk Level")
???? 第四部分:高级技巧
4.1 调整地图元素
控制子地图数量和位置
:
# 只显示3个子地图
map_custom <- plot_world_map_D(
data = dta,
breaks = c(0, 1, 5, 10, 50, 100, 300),
small_titles = c("China", "Caribbean", "West Africa"), # 只定义3个
small_map_coordinates = list(
c(73, 130, 3.5, 53), # 中国
c(-92, -60, 5, 27), # 加勒比海
c(-17, -7, 7, 20) # 西非
)
)
隐藏子地图,仅显示主地图
:
map_main_only <- plot_world_map(dta,
only_large_map = TRUE) # 关键参数
4.2 图例位置和样式
map_legend <- plot_auto_world_map_D(
dta,
n_breaks = 5,
legend_position = c(0.15, 0.3), # (x, y)坐标, 范围0-1
legend_name = "ASMR\n(/100,000)" # 使用\n换行
)
图例位置坐标说明
:
c(0, 0): 左下角
c(1, 1): 右上角
c(0.5, 0.5): 中心
c(0.8, 0.2): 右下角(常用)
4.3 分辨率和尺寸设置
# 用于论文(高清)
ggsave("map_paper.png", map, width = 16, height = 10, dpi = 300)
# 用于PPT演示(中清)
ggsave("map_ppt.png", map, width = 12, height = 8, dpi = 150)
# 用于海报(超高清晰度)
ggsave("map_poster.png", map, width = 20, height = 15, dpi = 600)
# 保存为矢量图(无限放大)
ggsave("map_vector.pdf", map, width = 16, height = 10)
???? 完整代码汇总
# =====================================
# GlobalBurdenR包第二章完整示例代码
# 世界地图和区域地图绘制
# =====================================
setwd('/Users/yuzheng/Documents/GBD数据/2023SDI和pop数据')
library(GlobalBurdenR)
library_required_packages()
# 1. 加载数据
data <- read.csv('2023TB.csv')
dta <- gbd_filter(data, measure == "Deaths", age == 'Age-standardized',
year == 2023, sex == "Both", metric == 'Rate')
# 创建输出目录
dir.create("maps_output", showWarnings = FALSE)
# 2. 连续变量世界地图
map1 <- plot_world_map(dta, only_large_map = FALSE, color_palette = "RdYlBu",
legend_name = "ASMR",
plot_title = "全球结核病死亡率 2023")
ggsave("maps_output/01_world_continuous.png", map1, width = 16, height = 10, dpi = 300)
# 3. 自动分段世界地图
map2 <- plot_auto_world_map_D(dta, n_breaks = 7, color_palette = "RdYlBu",
plot_title = "全球结核病死亡率 2023",
legend_name = "ASMR")
ggsave("maps_output/02_world_discrete.png", map2, width = 16, height = 10, dpi = 300)
# 4. 手动分段世界地图
colors <- c('#3182BD','#6BAED6','#9ECAE1','#FEE5D9','#FCAE91','#FB6A4A','#DE2D26','#A50F15')
map3 <- plot_world_map_D(data = dta, breaks = c(0,1,2,3,4,5,6,7),
labels = c("0-1","1-2","2-3","3-4","4-5","5-6","6+"),
color_palette = colors, legend_name = "ASMR")
ggsave("maps_output/03_world_custom.png", map3, width = 16, height = 12, dpi = 300)
# 5. 查看可用区域
gbd_show_all_regions()
# 6. 东南亚区域地图
Southeast_Asia <- gbd_extract_region_data(dta, "Southeast_Asia")
map5 <- plot_auto_world_map_D(Southeast_Asia, n_breaks = 7, only_large_map = TRUE)
ggsave("maps_output/05_southeast_asia.png", map5, width = 12, height = 10, dpi = 300)
# 7. 南亚地图(带国家名)
South_Asia <- gbd_extract_region_data(dta, "South_Asia")
map6 <- plot_auto_world_map_D(South_Asia, n_breaks = 7, show_country_names = TRUE)
ggsave("maps_output/06_south_asia.png", map6, width = 12, height = 10, dpi = 300)
# 8. 兰塞特期刊风格
map7 <- IF25_Lancet_Public_Health_region_map(
data = Southeast_Asia, countries = unique(Southeast_Asia$location),
auto_bbox = TRUE, color_scheme = 'RdYlBu')
ggsave("maps_output/07_lancet_style.png", map7, width = 12, height = 10, dpi = 300)
# 9. 预先设定区域
map8 <- plot_world_region_map(dta, region = 'east_and_south_europe')
ggsave("maps_output/08_europe.png", map8, width = 12, height = 10, dpi = 300)
cat("\n所有地图生成完成! 输出目录: maps_output/\n")
运行时间: 大约2-3分钟(生成8张高分辨率地图)
???? 核心函数对比表
| 函数名 | 地图类型 | 复杂度 | 适用场景 | 自定义程度 |
|---|---|---|---|---|
| 连续变量世界地图 | ? | 初步探究 | ?? |
| 自动分段世界地图 | ?? | 快速分组 | ??? |
| 手动分段世界地图 | ??? | 精细控制 | ????? |
| 提取区域数据 | ? | 数据预备 | - |
| 预定义区域地图 | ? | 快速绘图 | ?? |
| 期刊风格地图 | ?? | 论文提交 | ???? |
? 常见问题解答(FAQ)
Q1: 为何地图中某些国家显示为灰色?
A: 灰色表明该国数据缺失。可能原因:
- 筛选标准过于严格(如
、age
组合不存在)metric - 原始数据中确实没有该国数据
- 国家名称拼写错误
解决方案:
# 检查缺失国家
all_countries <- c("USA", "China", "India", ...) # 期望的国家列表
missing <- setdiff(all_countries, unique(dta$location))
print(missing)
Q2: 怎样自定义子地图的位置?
A: 利用
small_map_coordinates 参数, 每个坐标为 c(经度min, 经度max, 纬度min, 纬度max):
# 例如: 中国东部地区
china_east <- c(110, 125, 20, 45) # 经度110-125°E, 纬度20-45°N
可以利用在线工具(如 latlong.net) 查询坐标。
Q3: 如何使地图标题支持中文?
A: 确认系统字体支持中文:
library(showtext)
showtext_auto()
map <- plot_world_map(dta, plot_title = "全球结核病死亡率分布")
Q4: 生成的地图过大, 如何减小文件大小?
A: 调整 DPI 和尺寸:
# 方法1: 减少 DPI
ggsave("map.png", map, width = 16, height = 10, dpi = 150) # 从300降至150
# 方法2: 使用 JPEG 格式
ggsave("map.jpg", map, width = 16, height = 10, dpi = 300, quality = 85)
# 方法3: 压缩 PNG
# 使用 TinyPNG 等在线工具压缩
Q5: 如何绘制多年度地图对比?
A: 使用循环或
patchwork 包拼接:
library(patchwork)
# 绘制2010、2015、2020、2023四个年份
years <- c(2010, 2015, 2020, 2023)
maps <- list()
for (i in 1:length(years)) {
dta_year <- gbd_filter(data, year == years[i], ...)
maps[[i]] <- plot_world_map(dta_year, plot_title = paste("Year", years[i]))
}
# 拼接成2x2布局
combined_map <- (maps[[1]] + maps[[2]]) / (maps[[3]] + maps[[4]])
ggsave("maps_comparison.png", combined_map, width = 20, height = 16, dpi = 300)
???? 下期预告
GlobalBurdenR包系列教程(三):EAPC计算与趋势分析
下一篇将介绍:
- 计算EAPC(估计年度百分比变化)
- 绘制EAPC全球地图(展示时间趋势)
- EAPC条形图和热图可视化
- Joinpoint回归分析(识别趋势转折点)
本文资源
完整代码: 参见"完整代码汇总"部分
示例数据: 使用第一章的数据
2023TB.csv
生成地图: 8张高清PNG图片(chapter2_maps目录)
总结
本文通过真实的GBD 2023结核病数据, 演示了GlobalBurdenR包的地图绘制功能:
- 3种全球地图: 连续变量、自动分段、手动分段
- 5种地区地图: 东南亚、南亚、欧洲、Lancet风格、预设区域
- 自动子地图: 7个关键区域自动放大
- 灵活调色: 支持所有MetBrewer和RColorBrewer方案
- 出版级品质: 300 DPI高清输出,满足Nature/Lancet标准
核心理念: 使GBD地图绘制变得简便、迅速、专业!
敬请期待下一篇!
GlobalBurdenR v3.0.0 | 使GBD数据分析更加简便


雷达卡


京公网安备 11010802022788号







