如何为pairs()生成的相关图设置不同字体样式的变量标签
解决pairs()相关图中变量标签字体样式自定义问题
要实现不同变量标签使用不同字体样式,核心是自定义text.panel函数,利用函数自带的位置参数定位变量,动态设置字体样式。
具体实现:
- 先定义一个字体样式向量,严格对应每个变量的字体要求:
- 第1、2、5个变量:常规字体(
1) - 第3个变量:手写体(
3) - 第4、6个变量:粗体(
4)
- 第1、2、5个变量:常规字体(
- 自定义
text.panel函数,仅在对角线位置绘制标签,并根据变量位置调用对应的字体样式。
修改后的完整代码:
data("USJudgeRatings") correlation <- USJudgeRatings[1:6] clrs <- RColorBrewer::brewer.pal(n = 6, name = "RdBu") panel.hist <- function(x, ...) { usr <- par("usr") on.exit(par(usr)) par(usr = c(usr[1:2], 0, 1.5)) his <- hist(x, plot = FALSE) breaks <- his$breaks nB <- length(breaks) y <- his$counts y <- y/max(y) # 用current.panel.number()替代全局变量,避免环境污染 panel_num <- current.panel.number() rect(breaks[-nB], 0, breaks[-1], y, col = clrs[panel_num] , ...) } # 定义字体样式向量,对应6个变量的需求 font_vec <- c(1, 1, 3, 4, 1, 4) # 自定义text.panel函数 panel_text <- function(x, y, labels, cex, ...) { # 仅处理对角线的标签 if (current.panel.number() %in% 1:ncol(correlation)) { idx <- current.panel.number() text(x, y, labels[idx], cex = cex, font = font_vec[idx], ...) } } pairs(correlation, na.action = na.omit, diag.panel = panel.hist, text.panel = panel_text, cex.labels = 2, oma=c(1.4,1.4,1.4,1.4))
关键说明:
- 用
current.panel.number()替代原来的全局变量c,避免全局环境变量污染,代码更规范。 font_vec的索引位置与变量顺序完全对应,确保每个标签调用正确的字体样式。panel_text函数通过current.panel.number()判断当前绘制的变量位置,精准匹配字体设置。
内容的提问来源于stack exchange,提问作者Layla
相关产品推荐
相关产品推荐

