从全球视角到区域聚焦,一行代码绘制出版级别的地图
在GBD(全球疾病负担)研究中,地图可视化是最直接、最具说服力的展示方式:
然而,传统方法绘制GBD地图面临许多挑战:
GlobalBurdenR包一键解决所有问题!
阅读完本文,您将学会:
本文使用真实的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万人
适用场景: 展示全球疾病负担的连续分布,适合初步探索数据
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)
参数详解:
| 参数 | 说明 | 可选值/示例 |
|---|---|---|
|
是否只绘制主地图(不含子地图) | (默认), |
|
颜色方案 | (红黄蓝), (光谱), , |
|
图例标题 | 自定义字符串 |
|
地图标题 | 自定义字符串 |
生成效果:

图表解读:
RdYlBu: 红黄蓝,适合表示“高-中-低”Spectral: 光谱色,适合突出极值Viridis: 色盲友好,适合灰度打印YlOrRd: 黄橙红,适合表示风险递增适用场景: 需要将连续数据分组展示,但不确定最佳断点
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
breaksc(0, 1, 2, 3, 4, 5, 6, 7)labelsc("0-1", "1-2", ...)color_palettec('#3182BD', '#6BAED6', ...)small_titlessmall_map_coordinatesc(经度min, 经度max, 纬度min, 纬度max)
可用区域列表:
[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_Europe???????? Viet Nam (越南)
???????? Indonesia (印度尼西亚)
???????? Philippines (菲律宾)
???????? Myanmar (缅甸)
???????? Cambodia (柬埔寨)
???????? Lao PDR (老挝)
???????? Malaysia (马来西亚)
???????? Singapore (新加坡)
???????? Brunei (文莱)
???????? Timor-Leste (东帝汶)
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(文莱)
步骤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
参数解释
? 在各国中心位置自动标示国家名称
? 字体尺寸依据国家面积自动调整
? 防止文字重叠
? 适用于报告和教学
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
适用场景
: 快速绘制常用区域,无需数据提取
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_europebaltic_countriesmiddle_east_north_africasub_saharan_africacaribbean生成效果
:
GlobalBurdenR支持所有
MetBrewer
和
RColorBrewer
配色方案:
推荐配色(按场景)
:
场景
配色方案
特点
效果
发病率/死亡率(低→高)
"YlOrRd""RdYlBu""Spectral""Viridis""Hiroshige""Cassatt2"# 方案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")
控制子地图数量和位置
:
# 只显示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) # 关键参数
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)# 用于论文(高清)
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计算与趋势分析
下一篇将介绍:
完整代码: 参见"完整代码汇总"部分
示例数据: 使用第一章的数据
2023TB.csv
生成地图: 8张高清PNG图片(chapter2_maps目录)
本文通过真实的GBD 2023结核病数据, 演示了GlobalBurdenR包的地图绘制功能:
核心理念: 使GBD地图绘制变得简便、迅速、专业!
敬请期待下一篇!
GlobalBurdenR v3.0.0 | 使GBD数据分析更加简便
扫码加好友,拉您进群



收藏
