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

如何为pairs()生成的相关图设置不同字体样式的变量标签

解决pairs()相关图中变量标签字体样式自定义问题

要实现不同变量标签使用不同字体样式,核心是自定义text.panel函数,利用函数自带的位置参数定位变量,动态设置字体样式。

具体实现:

  1. 先定义一个字体样式向量,严格对应每个变量的字体要求:
    • 第1、2、5个变量:常规字体(1)
    • 第3个变量:手写体(3)
    • 第4、6个变量:粗体(4)
  2. 自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:35:25