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

如何用ggplot2在R中绘制带相似度得分的上三角相关矩阵图?

实现ggplot2仅绘制上三角区域的相关图

你的问题核心是数据框虽为上三角数据,但绘图时ggplot自动生成了所有变量组合的散点。以下是两种直接有效的解决方法:

方法1:提前筛选上三角数据行

先统一变量的因子顺序,再通过索引筛选出仅属于上三角的行,之后再绘图:

# 统一var1和var2的因子水平顺序,确保两者排序一致
df$var1 <- factor(df$var1, levels = unique(df$var1))
df$var2 <- factor(df$var2, levels = levels(df$var1))

# 筛选上三角区域:保留var1的因子索引小于var2的行
df_upper <- df[as.integer(df$var1) < as.integer(df$var2), ]

# 重新绘图(注意修正你之前标签颠倒的问题)
ggplot(df_upper, aes(x = var1, y = var2, color = cor, size = jaccard)) +
  geom_point(alpha = 0.7) +
  scale_size_continuous(name = "Jaccard Index") +
  scale_color_continuous(name = "相关性", low = "blue", high = "red") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 可选:旋转x轴标签避免重叠

方法2:使用ggcorrplot包快速生成上三角相关图

如果你的数据可以转换为矩阵格式,ggcorrplot专门针对相关图设计,能直接指定显示上三角:

library(tidyr)
library(ggcorrplot)

# 将长格式数据转换为相关性矩阵
cor_matrix <- pivot_wider(df, id_cols = var1, names_from = var2, values_from = cor)
rownames(cor_matrix) <- cor_matrix$var1
cor_matrix <- as.matrix(cor_matrix[, -1])

# 转换Jaccard相似度矩阵(用于控制点大小)
jaccard_matrix <- pivot_wider(df, id_cols = var1, names_from = var2, values_from = jaccard)
rownames(jaccard_matrix) <- jaccard_matrix$var1
jaccard_matrix <- as.matrix(jaccard_matrix[, -1])

# 绘制上三角相关图
ggcorrplot(cor_matrix,
           type = "upper",  # 指定仅显示上三角
           lab = FALSE,  # 关闭数值标签(如需显示可设为TRUE)
           size = jaccard_matrix[upper.tri(jaccard_matrix)],  # 绑定上三角的Jaccard值到点大小
           outline.color = "white") +
  scale_color_gradient(low = "blue", high = "red") +
  labs(color = "相关性", size = "Jaccard Index")

重要提示

你原代码中scale_size_continuous和scale_color_continuous的名称标签搞反了,上述代码已修正,确保对应变量的含义正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:52:10