You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R的Heatmap.2热图中为行列及所有文本设置Times New Roman字体

解决Heatmap.2中所有文本统一设置为Times New Roman的问题

嘿,我知道你为啥只有轴标题生效了——heatmap.2是基于R的基础绘图系统写的,不是ggplot2那一套!你之前加的theme_bw()element_text()都是ggplot的语法,对它完全没用,这就是行名、列名没变化的核心原因。

下面给你一套能让所有文本(行名、列名、轴标题)都变成Times New Roman的解决方案:

第一步:确保字体正确加载

先把extrafontgplots的环境搭好,字体导入只需要做一次:

# 安装需要的包(第一次运行时)
install.packages(c("extrafont", "gplots"))
library(extrafont)
library(gplots)

# 导入系统字体(仅需运行一次,运行时间可能较长)
font_import()

# 根据你的设备加载字体:
# 如果是导出PDF,用这个:
loadfonts(device = "pdf")
# 如果是在RStudio窗口显示,Windows系统用这个:
# loadfonts(device = "win")
# Mac系统用这个:
# loadfonts(device = "quartz")

# 可以用这个命令确认Times New Roman是否已导入
fonts()

第二步:修改Heatmap.2代码

用基础绘图的全局设置来指定字体,再配合heatmap.2的专属参数控制字号:

# 全局设置基础绘图的字体为Times New Roman,且加粗(对应你之前的face="bold")
par(family = "Times New Roman", font = 2)

# 绘制热图
heatmap.2(data,
          Colv = NA, 
          Rowv = NA, 
          scale = "row", 
          tracecol = NA, 
          col = terrain.colors(256), 
          xlab = "Treatments", 
          ylab = "Genes of Interest",
          # 设置行名、列名的字号
          cexRow = 12, 
          cexCol = 12,
          # 设置轴标题的字号
          cex.lab = 12
)

关键说明

  • 为啥之前的theme没用?因为heatmap.2不属于ggplot2生态,它的所有文本样式都受基础绘图的par()参数控制,和ggplot的主题系统完全不兼容。
  • 如果你的系统里Times New Roman的名称不是这个(比如部分Linux系统叫Times),可以用fonts()命令查看准确的字体名称,替换par(family = "...")里的内容。
  • 导出PDF时,一定要先运行loadfonts(device = "pdf"),否则字体可能无法嵌入PDF,打开后会变成默认字体。

内容的提问来源于stack exchange,提问作者Maria Faleeva

火山引擎 最新活动