You need to enable JavaScript to run this app. R语言ggplot2中是否有等效于PerformanceAnalytics的chart.Correlation函数
优惠活动
大模型
产品
解决方案
定价
更多

R语言ggplot2中是否有等效于PerformanceAnalytics的chart.Correlation函数

目前ggplot2生态有成熟的等效实现方案,不需要完全从零开发,同时也支持你要求的加权数据适配,具体实现方式如下:

方案1:直接使用GGally包的ggpairs函数

GGally是ggplot2的官方拓展包之一,其提供的ggpairs函数是最接近PerformanceAnalytics::chart.Correlation的现成工具,默认支持ggplot2的全套语法规则,可直接传入权重映射。
基础无权重版本的用法和原函数几乎一致:

# 加载所需包
library(ggplot2)
library(GGally)
library(PerformanceAnalytics)

data(managers)
# 生成和原chart.Correlation效果近似的相关矩阵图
ggpairs(
  managers[,1:8],
  lower = list(continuous = wrap("points", pch = "+")),
  diag = list(continuous = wrap("barDiag", bins = 15)),
  upper = list(continuous = wrap("cor", size = 3))
)

方案2:自定义加权版本的相关矩阵图

如果需要完全适配加权数据,只需要自定义ggpairs三个区域的绘图函数即可,代码如下:
首先安装加载额外需要的加权计算包:

install.packages("weights")
library(weights)

构造带权重的示例数据,实际使用时替换为你的真实权重列即可:

df <- as.data.frame(managers[,1:8])
df$weight <- runif(nrow(df), 0.5, 2) # 示例权重列

分别自定义上三角(加权相关系数+显著性标记)、对角线(加权直方图/密度曲线)、下三角(加权散点)的绘图函数:

# 上三角:加权相关系数+显著性标记
wtd_cor <- function(data, mapping, ...){
  x <- eval_data_col(data, mapping$x)
  y <- eval_data_col(data, mapping$y)
  w <- eval_data_col(data, mapping$weight)
  cor_res <- wtd.cor(x, y, weight = w)
  r <- round(cor_res[1,1], 2)
  sig <- cut(cor_res[1,4], breaks = c(-Inf, 0.001, 0.01, 0.05, Inf), labels = c("***", "**", "*", ""))
  ggplot(data, mapping) +
    geom_text(aes(label = paste0(r, "\n", sig)), size = 4) +
    theme_void()
}

# 对角线:加权直方图+加权密度曲线
wtd_diag <- function(data, mapping, ...){
  ggplot(data, mapping) +
    geom_histogram(aes(y = after_stat(density), weight = weight), bins = 15, fill = "grey90", col = "black") +
    geom_density(aes(weight = weight), col = "#d73027", linewidth = 1)
}

# 下三角:加权散点图
wtd_point <- function(data, mapping, ...){
  ggplot(data, mapping) +
    geom_point(aes(weight = weight), pch = "+", alpha = 0.7)
}

最终调用ggpairs生成加权相关矩阵图:

ggpairs(
  df,
  columns = 1:8, # 指定参与相关计算的列,排除权重列
  mapping = aes(weight = weight), # 全局传入权重映射
  lower = list(continuous = wtd_point),
  diag = list(continuous = wtd_diag),
  upper = list(continuous = wtd_cor)
) + theme_bw()

如果需要高频使用,可以把上述逻辑封装成独立函数,调用方式和原chart.Correlation完全一致,还可以按需自定义配色、字体、显著性规则等样式,灵活度远高于原函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:33:03