如何在R的Heatmap.2热图中为行列及所有文本设置Times New Roman字体
解决Heatmap.2中所有文本统一设置为Times New Roman的问题
嘿,我知道你为啥只有轴标题生效了——heatmap.2是基于R的基础绘图系统写的,不是ggplot2那一套!你之前加的theme_bw()和element_text()都是ggplot的语法,对它完全没用,这就是行名、列名没变化的核心原因。
下面给你一套能让所有文本(行名、列名、轴标题)都变成Times New Roman的解决方案:
第一步:确保字体正确加载
先把extrafont和gplots的环境搭好,字体导入只需要做一次:
# 安装需要的包(第一次运行时) 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




