楼主: W16083019320154
83 1

[其他] 02-GlobalBurdenR世界地图与区域地图绘制_可发布 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-10-11
最后登录
2018-10-11

楼主
W16083019320154 发表于 2025-11-17 19:23:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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)

参数详解:

参数 说明 可选值/示例
only_large_map
是否只绘制主地图(不含子地图)
FALSE
(默认),
TRUE
color_palette
颜色方案
"RdYlBu"
(红黄蓝),
"Spectral"
(光谱),
"Viridis"
,
"YlOrRd"
legend_name
图例标题 自定义字符串
plot_title
地图标题 自定义字符串

生成效果:

图表解读:

  • 红色区域(高死亡率): 撒哈拉以南非洲国家(>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_Europe

2.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张高分辨率地图)

???? 核心函数对比表

函数名地图类型复杂度适用场景自定义程度
plot_world_map()
连续变量世界地图?初步探究??
plot_auto_world_map_D()
自动分段世界地图??快速分组???
plot_world_map_D()
手动分段世界地图???精细控制?????
gbd_extract_region_data()
提取区域数据?数据预备-
plot_world_region_map()
预定义区域地图?快速绘图??
IF25_Lancet_Public_Health_region_map()
期刊风格地图??论文提交????

? 常见问题解答(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数据分析更加简便

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Global Burden lobal 世界地图 ENR

沙发
512661101 发表于 2025-11-19 10:19:47
谢谢分享!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-6 08:09