前言
在中国当医生,最不容易的一点除了医闹就是发论文。与外国同行相比,中国医生在繁忙的医疗工作之余,还有全球最男的论文发表任务,可能是评职称的要求,可能是为了完成院长的指示。我无意探讨这些复杂的显示,我只知道复杂的数据往往需要高效直观的展示方式,而这正是数据可视化在投稿中的作用所在。
正所谓“一图胜千言”,今天的更新将以三种常见的医学数据可视化方法为例,分享如何在R语言中生成高质量图表,并进行个性化设置以达到投稿标准。这些方法包括:生存分析的Kaplan-Meier曲线、组间比较的箱线图,以及相关性分析的散点图和相关矩阵。
1. Kaplan-Meier曲线:生存分析的必备工具
Kaplan-Meier曲线用于比较不同组患者的生存率,是医学论文中常见的可视化形式。
# 安装并加载所需包
library(survival)
library(survminer)
# 示例数据
data(lung)
lung$sex <- factor(lung$sex, labels = c("Male", "Female"))
# Kaplan-Meier生存分析
surv_obj <- Surv(lung$time, lung$status)
fit <- survfit(surv_obj ~ sex, data = lung)
# 高质量Kaplan-Meier图
ggsurvplot(
fit,
data = lung,
pval = TRUE, # 显示p值
conf.int = TRUE, # 显示置信区间
risk.table = TRUE, # 风险表
risk.table.height = 0.3, # 调整风险表高度
legend.title = "Sex",
legend.labs = c("Male", "Female"),
ggtheme = theme_classic(),
palette = c("#D55E00", "#0072B2"), # Nature推荐配色
xlab = "Time (days)",
ylab = "Survival Probability",
font.x = 16,
font.y = 16,
font.tickslab = 14,
font.legend = 14,
risk.table.fontsize = 8, # 风险表字体
break.time.by = 200, # 时间刻度间隔
title = "Kaplan-Meier Survival Curve",
font.title = c(18, "bold", "black")
)
2. 箱线图:对比组间差异
箱线图能够展示连续变量在不同组间的分布差异(例如治疗组与对照组的血糖水平差异)。
# 示例数据
set.seed(123)
group <- rep(c("Treatment", "Control"), each = 50)
glucose <- c(rnorm(50, mean = 100, sd = 10), rnorm(50, mean = 90, sd = 12))
data <- data.frame(group, glucose)
# 高质量箱线图
library(ggplot2)
ggplot(data, aes(x = group, y = glucose, fill = group)) +
geom_boxplot(outlier.shape = 21, outlier.fill = "red", outlier.size = 2) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 4, color = "black") +
scale_fill_manual(values = c("#56B4E9", "#E69F00")) + # Nature推荐配色
labs(
title = "Comparison of Glucose Levels Between Groups",
x = "Group",
y = "Glucose Level (mg/dL)"
) +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, size = 18, face = "bold"),
axis.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 14),
legend.position = "none",
panel.grid = element_blank(),
axis.line = element_line(size = 1)
)
3. 散点图和相关矩阵:分析变量间的关系
散点图适合展示变量之间的趋势,而相关矩阵则提供变量间相关性的整体视角。
散点图
# 示例数据
set.seed(123)
weight <- rnorm(100, mean = 70, sd = 10)
bp <- 0.5 * weight + rnorm(100, mean = 60, sd = 5)
data <- data.frame(weight, bp)
# 高质量散点图
ggplot(data, aes(x = weight, y = bp)) +
geom_point(color = "#0072B2", size = 3, alpha = 0.8) +
geom_smooth(method = "lm", color = "#D55E00", linetype = "dashed", size = 1) +
labs(
title = "Scatterplot of Weight and Blood Pressure",
x = "Weight (kg)",
y = "Blood Pressure (mmHg)"
) +
theme_classic() +
theme(
plot.title = element_text(hjust = 0.5, size = 18, face = "bold"),
axis.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 14),
axis.line = element_line(size = 1),
panel.grid = element_blank()
)
相关矩阵
library(corrplot)
# 使用复杂数据集
data(mtcars)
cor_matrix <- cor(mtcars) # 计算相关系数矩阵
# 设置画布大小
options(repr.plot.width = 10, repr.plot.height = 10) # 调整画布尺寸
# 自定义相关矩阵绘图
corrplot(
cor_matrix,
method = "color", # 上三角区域使用颜色填充
col = colorRampPalette(c("#0072B2", "white", "#D55E00"))(200),
addCoef.col = "black", # 显示相关系数
number.cex = 0.8, # 相关系数字体大小
type = "upper", # 上三角显示相关系数
diag = FALSE, # 不显示对角线
tl.col = "black", # 标签颜色
tl.cex = 1.2, # 标签字体大小
cl.cex = 1.2, # 图例字体大小
title = "Correlation Matrix", # 图表标题
mar = c(1, 1, 2, 1) # 调整边距
)
# 下三角显示圆圈
corrplot(
cor_matrix,
method = "circle", # 下三角区域使用圆圈
col = colorRampPalette(c("#0072B2", "white", "#D55E00"))(200),
type = "lower", # 下三角显示圆圈
add = TRUE, # 叠加图表
diag = FALSE, # 不显示对角线
tl.pos = "n", # 隐藏下三角的标签
cl.pos = "b", # 图例位置(底部)
cl.cex = 1.2 # 图例字体大小
)
小结
今天我们介绍了三种常见的医学数据可视化方法及其R语言实现,并提供了个性化设置建议,使生成的图表更具投稿价值。后续内容将继续分享其他医学数据的可视化技巧,如热图、森林图,建模图等。欢迎持续关注,共同探讨数据在医学研究中的价值!
代码定制,科研咨询可加微信。备注来意:
感谢关注,你的支持是我不懈的动力!