如何用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
相关产品推荐
相关产品推荐

