R语言基于ggplot2绘制哑铃图(Dumbbell Plot)指南

Owen
Owen
发布时间:2026-10-16 | 3人浏览过
原创

哑铃图(Dumbbell Plot)常用于展示两组数据或同一组数据在不同时间点的差异,具有直观简洁的特点。本文将逐步演示如何使用R语言和ggplot2库从零开始绘制哑铃图,包括关键代码实现及常见问题的解决。

绘图前数据准备

在开始绘图之前,需要确保数据格式符合R语言的读取要求。建议将数据整理后保存为CSV格式。初始数据结构通常包含标识符(如基因名 Gene)以及需要对比的两列或多列数值数据。

第一步:读取数据文件

目的:将外部存储的CSV数据载入R环境,并正确识别行列属性。
入口:R控制台
动作:使用 read.csv 函数读取文件路径。

关键参数说明:

  • header = T:指定第一行为列名。若无表头请设为 F。
  • check.names = F:默认情况下R会自动替换列名中的空格为 .,设置为 F 可保留原始列名结构。
data <- read.csv("your file path", header = T, check.names = F)

加载必要的R包

绘制哑铃图核心依赖 ggplot2 进行作图,同时使用 reshape2(或 tidyr)来处理数据维度转换。

library(ggplot2) 
library(reshape2)

执行绘图操作

第二步:数据重塑(Melt)与基础图层搭建

目的:将宽格式数据转换为适合ggplot2绘制的长格式。
入口:R控制台
动作:调用 melt() 函数并初始化 ggplot 对象。

重要参数:id.vars = "Gene" 用于指定不作为变量的固定列(ID列)。

# 将数据由宽变长
data_melt <- melt(data, id.vars = "Gene")

# 定义基础绘图对象
p <- ggplot(data_melt, aes(x = value, y = Gene)) + 
     geom_line(aes(group = Gene)) +      # 连接两个点的线条
     geom_point(aes(fill = variable), size = 3) # 填充颜色的实心点
p

第三步:解决颜色填充不生效的问题

在上述基础代码中,如果直接使用 aes(fill = variable),可能会发现点没有按照变量分组显示不同颜色。这是因为 geom_point() 默认的几何形状(Shape)为 16(实心圆),该形状仅支持 color 参数控制边缘/填充色,而不支持 fill 属性(除非使用特定形状编号如 21-25)。

修改方案:将映射方式改为 color,或者在保持 fill 的同时显式指定支持双色映射的 Shape(如 shape = 21)。

修正后的代码示例:

p <- ggplot(data_melt, aes(x = value, y = Gene)) + 
  geom_line(aes(group = Gene)) +
  geom_point(aes(color = variable), size = 3)  # 使用color参数
p

第四步:优化点位大小(可选)

目的:根据数值大小动态调整点的大小,增强视觉表达层次。
动作:在 geom_point 中增加 aes(size = value)。

p <- ggplot(data_melt, aes(x = value, y = Gene)) + 
  geom_line(aes(group = Gene)) +
  geom_point(aes(color = variable, size = value))  # 绑定大小变量
p

第五步:自定义Y轴排序

目的:调整基因或类别的显示顺序(例如按特定逻辑排列或倒序排列),使图表更易读。
动作:创建向量定义顺序,并使用 scale_y_discrete(limits = order) 应用。

注意:若要使用 fill 属性配色且希望点带有边框和内部填充,需配合 shape = 21。

# 定义顺序向量
order <- c("Gene1","Gene2","Gene3","Gene4","Gene5",
           "Gene6","Gene7","Gene8","Gene9","Gene10")

# 应用排序
p <- ggplot(data_melt, aes(x = value, y = Gene)) + 
  geom_line(aes(group = Gene)) +
  geom_point(aes(fill = variable), shape = 21, size = 3) +
  scale_y_discrete(limits = order)
p

逆序排列技巧:若希望排在最前面的项位于Y轴顶部(视觉上靠上),可使用 rev() 函数反转列表顺序。

order <- rev(order)
p <- ggplot(data_melt, aes(x = value, y = Gene)) + 
  geom_line(aes(group = Gene)) +
  geom_point(aes(fill = variable), shape = 21, size = 3) +
  scale_y_discrete(limits = order)
p

以上就是R语言使用ggplot2绘制Dumbbell Plot哑铃图的详细内容,更多关于R语言高级绘图技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表