You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改EnhancedVolcano包绘制火山图的全部文本字体?

EnhancedVolcano火山图基因标签字体修改方案

问题原因

EnhancedVolcano 输出的是ggplot2对象,但基因名称标签是包内部独立调用geom_text/geom_text_repel(开启drawConnectors=TRUE时使用)绘制的,不属于ggplot全局theme的文本控制范围,因此theme(text = element_text())的设置只会作用于坐标轴、标题这类由theme管控的文本,无法覆盖基因标签。

解决方法

方法1:绘图时直接指定标签字体(推荐)

EnhancedVolcano 原生提供了labFamily参数专门控制基因标签的字体,直接在函数调用时传入目标字体即可,一次设置不需要后续修改图层。
修改后的绘图核心代码如下:

a <- EnhancedVolcano(data.matrix,
  lab = rownames(data.matrix), x = "Log2.fold.change",
  y = "P.value", xlim = c(-2, 2), ylim = c(0, 6), xlab = bquote(~ Log[2] ~ "fold change"), 
  ylab = bquote(~ -Log[10] ~ italic(P)), axisLabSize = 12, 
  title = paste("NanoString -", data.name), subtitle = "", 
  labFace = "bold", labFamily = "Arial", # 新增该行指定标签字体为Arial
  pointSize = 2, labSize = 5, pCutoff = 10e-2, FCcutoff = 0.4, 
  gridlines.major = FALSE, gridlines.minor = FALSE, drawConnectors = TRUE, 
  widthConnectors = 0.2, colConnectors = "black", legendPosition = "none"
)

# 全局主题设置统一其余文本的字体、字号
EV_merge <- a + theme(text = element_text(size = 8, family = "Arial"))
print(EV_merge)

方法2:修改已有ggplot对象的图层参数

如果不想重新运行绘图代码,可以直接遍历图对象的图层,定位到基因标签对应的文本图层,直接修改其字体参数:

EV_merge <- a + theme(text = element_text(size = 8, family = "Arial"))

# 遍历所有图层,替换文本类图层的字体为Arial
for (layer_idx in seq_along(EV_merge$layers)) {
  current_geom <- EV_merge$layers[[layer_idx]]$geom
  # 匹配普通文本层、带连接线的ggrepel文本层
  if (inherits(current_geom, "GeomText") | inherits(current_geom, "GeomTextRepel")) {
    EV_merge$layers[[layer_idx]]$aes_params$family <- "Arial"
  }
}

print(EV_merge)

注意事项

  • 不建议用sans作为字体名别名,不同操作系统下sans映射的默认无衬线字体可能有差异,直接指定"Arial"可以保证跨环境字体一致。
  • 原代码中设置的labFace = "bold"参数和labFamily参数完全兼容,不会出现加粗效果失效的问题。

内容的提问来源于stack exchange,提问作者Jun Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:31:18