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

R语言中如何让两个并排的corrplot尺寸一致并添加变量映射图例?

问题:corrplot并排绘制时尺寸不一致的优化方案

问题背景

现有两个数据框df1和df2,生成Pearson相关矩阵后,因变量名称过长,通过自定义函数将其映射为短名称。使用par(mfrow=c(1,2))并排绘制corrplot时,保留长行名的第一个图尺寸小于第二个图。已尝试用layout()手动设置宽度,但希望找到无需手动调整的方法让两图尺寸一致,或在图外添加短名称与原变量名的映射图例。

原始代码示例

v1 <- rnorm(100, 0, 1)
df1 <- data.frame("Very_long_variable_name_1" = v1, 
                  "Very_long_variable_name_2" = v1 + rnorm(100, 0, 0.1))
df2 <- data.frame("Very_long_variable_name_1" = 3*v1 - 1, 
                  "Very_long_variable_name_2" = 2*v1 + rnorm(100, 0, 0.1))
cors1 <- cor(df1, method = "pearson")
cors2 <- cor(df2, method = "pearson")
fun <- function(corr, shortName)
{
  if(shortName)
  {
    rownames(corr) <- c("V1", "V2")
  }
  colnames(corr) <- c("V1", "V2")
  return(corr)
}
par(mfrow = c(1,2))
cp1 <- corrplot::corrplot(fun(cors1, FALSE),  method = "color")
cp2 <- corrplot::corrplot(fun(cors2, TRUE),  method = "color")

已尝试的手动调整方案

layout(matrix(c(1, 2), 
              nrow = 1, 
              ncol = 2, 
              byrow = TRUE),
       widths =  c(1.5,1))
cp1 <- corrplot::corrplot(fun(cors1, FALSE), method = "color")
cp2 <- corrplot::corrplot(fun(cors2, TRUE), method = "color")

优化方案

方案1:统一使用短名称,添加外部映射图例

让两个图都使用短变量名,确保尺寸完全一致,再在绘图区域外添加短名称与原变量名的映射说明,既解决尺寸问题又保留变量名信息。

# 定义短名称与原变量名的映射表
name_mapping <- c(
  "V1" = "Very_long_variable_name_1",
  "V2" = "Very_long_variable_name_2"
)

# 统一将两个相关矩阵转换为短名称格式
cors1_short <- fun(cors1, TRUE)
cors2_short <- fun(cors2, TRUE)

# 绘制并排的corrplot
par(mfrow = c(1, 2))
corrplot::corrplot(cors1_short, method = "color", main = "df1 相关矩阵")
corrplot::corrplot(cors2_short, method = "color", main = "df2 相关矩阵")

# 在整个绘图区域下方添加映射图例
par(fig = c(0, 1, 0, 0.1), new = TRUE)  # 新建绘图区域,占底部10%高度
plot(0, 0, type = "n", bty = "n", xaxt = "n", yaxt = "n")  # 空画布
legend(
  "center", 
  legend = paste(names(name_mapping), "=", name_mapping),
  bty = "n",  # 去掉图例边框
  ncol = 2,   # 两列展示
  cex = 0.8   # 调整文本大小
)

方案2:自动计算宽度比例,无需手动调整

通过计算长名称和短名称的实际宽度比例,用layout()自动分配绘图宽度,避免手动设置固定数值。

# 获取长名称和短名称的文本宽度(单位:英寸)
long_names <- rownames(cors1)
short_names <- c("V1", "V2")
long_width <- max(strwidth(long_names, units = "inches"))
short_width <- max(strwidth(short_names, units = "inches"))

# 计算宽度比例,自动设置layout宽度
width_ratio <- long_width / short_width
layout(matrix(c(1, 2), nrow = 1), widths = c(width_ratio, 1))

# 绘制两个corrplot
corrplot::corrplot(fun(cors1, FALSE), method = "color")
corrplot::corrplot(fun(cors2, TRUE), method = "color")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:52:20