【R语言可视化】相关系数热图

目录

热图无显著性

结果展示01:

热图+显著性

结果展示02:

ggplot2绘制三角热图

结果展示03:

corrplot绘制三角热图

结果展示04:


热图无显著性

R 复制代码
# 示例数据
data(mtcars)
df <- mtcars

# 计算相关矩阵
cor_matrix <- round(cor(df), 2)

# reshape 成长格式
library(reshape2)
cor_df <- melt(cor_matrix)

# 画热图
library(ggplot2)
ggplot(cor_df, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white") +  ## 用色块(tiles)来构造热图
  geom_text(aes(label = sprintf("%.2f", value)), color = "black", 
            family = "Times New Roman", size = 4) +
  scale_fill_gradient2(low = "#67a9cf", mid = "white", high = "#ef8a62",
                       midpoint = 0, limit = c(-1, 1), name = "Correlation") +
  labs(title = "", x = "", y = "") +
  theme_bw(base_size = 14) +
  theme(
    axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
    text = element_text(family = "Times New Roman"),   
    panel.grid = element_blank())

结果展示01:


热图+显著性

R 复制代码
install.packages(c("Hmisc", "reshape2", "ggplot2"))
library(Hmisc)      # 用于计算相关性 + p 值
library(reshape2)   # 数据转换
library(ggplot2)    # 可视化

# 加载必要包
library(Hmisc)
library(reshape2)
library(ggplot2)

# 示例数据
df <- mtcars

# 1. 计算相关性矩阵和显著性
res <- rcorr(as.matrix(df))
r_mat <- res$r
p_mat <- res$P

# 2. 转换为长格式
r_df <- melt(r_mat)
p_df <- melt(p_mat)

# 3. 添加显著性标记
p_df$signif <- cut(p_df$value,
                   breaks = c(-Inf, 0.001, 0.01, 0.05, Inf),
                   labels = c("***", "**", "*", ""))

# 4. 合并 r 和 p
plot_df <- merge(r_df, p_df, by = c("Var1", "Var2"))

# 对角线的 p 值设为空
plot_df$signif[plot_df$Var1 == plot_df$Var2] <- ""

# 5. 生成标签(相关系数 + 显著性)
plot_df$label <- paste0(sprintf("%.2f", plot_df$value.x), plot_df$signif)

# 6. 绘制热图
ggplot(plot_df, aes(x = Var2, y = Var1, fill = value.x)) +
  geom_tile(color = "white") +
  geom_text(aes(label = label), family = "Times New Roman", size = 4) +
  scale_fill_gradient2(low = "#67a9cf", mid = "white", high = "#ef8a62",
                       midpoint = 0, limit = c(-1, 1), name = "Correlation") +
  labs(title = "", x = "", y = "") +
  theme_minimal(base_size = 14) +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    axis.text.y = element_text(),
    panel.grid = element_blank(),
    text = element_text(family = "Times New Roman")
  )

结果展示02:


ggplot2绘制三角热图

R 复制代码
library(Hmisc)
library(reshape2)
library(ggplot2)

# 准备数据
df <- mtcars
res <- rcorr(as.matrix(df))
r_mat <- res$r
p_mat <- res$P

# 转长格式
r_df <- melt(r_mat, na.rm = FALSE)
p_df <- melt(p_mat, na.rm = FALSE)

# 显著性标记
p_df$signif <- cut(p_df$value,
                   breaks = c(-Inf, 0.001, 0.01, 0.05, Inf),
                   labels = c("***", "**", "*", ""))

# 合并
plot_df <- merge(r_df, p_df, by = c("Var1", "Var2"))
plot_df$signif[plot_df$Var1 == plot_df$Var2] <- ""
plot_df$label <- paste0(sprintf("%.2f", plot_df$value.x), plot_df$signif)

# 只保留右上三角格子(包含对角线)
plot_df <- plot_df[as.numeric(plot_df$Var2) >= as.numeric(plot_df$Var1), ]

# 构造对角线上方的变量名标签
diagonal_labels <- subset(plot_df, Var1 == Var2)
diagonal_labels$label <- as.character(diagonal_labels$Var1)
diagonal_labels$y_pos <- as.numeric(diagonal_labels$Var1) - 0.3  # 微微往上移

# 绘图

ggplot() +
  geom_tile(data = plot_df, aes(x = Var2, y = Var1, fill = value.x), color = "white") +
  geom_text(data = plot_df, aes(x = Var2, y = Var1, label = label), 
            family = "Times New Roman", size = 4) +
  geom_text(data = diagonal_labels, aes(x = Var2, y = y_pos+1, label = label),
            family = "Times New Roman",  size = 4) +
  scale_fill_gradient2(
    low = "#67a9cf", high = "#ef8a62", mid = "white",
    midpoint = 0, limit = c(-1, 1), name = "Correlation",
    labels = scales::number_format(accuracy = 0.1)
  ) +
  # coord_fixed() +  #  保持格子为正方形
  labs(title = "", x = "", y = "") +
  theme_minimal(base_size = 14) +
  expand_limits(y = max(as.numeric(plot_df$Var1)) + 1)+
  theme(
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    axis.text.x = element_text(angle = 45, hjust = 1),
    panel.grid = element_blank(),
    text = element_text(family = "Times New Roman"),
    plot.title = element_text(hjust = 0.5)
  )

结果展示03:

corrplot绘制三角热图

R 复制代码
# 示例数据
df <- mtcars
cor_matrix <- cor(df)

par(family = "Times New Roman")

corrplot(cor_matrix,
         method = "square",        # 方格图
         type = "upper",           # 只显示上三角
         diag = TRUE,              # 显示对角线
         addCoef.col = "black",    # 显示相关系数数字
         number.cex = 0.7,         # 数值大小
         tl.col = "black",         # 标签颜色
         tl.cex = 0.8,             # 标签字体大小
         tl.srt = 45,              # x轴标签角度(支持 45°/60° 等)
         col = colorRampPalette(c("#67a9cf", "white", "#ef8a62"))(200),
         mar = c(0,0,2,0)          # 边距微调
)

结果展示04:

相关推荐
Yeats_Liao18 分钟前
Go Web 编程快速入门 01 - 环境准备与第一个 Web 应用
开发语言·前端·golang
卓码软件测评18 分钟前
第三方CMA软件测试机构:页面JavaScript动态渲染生成内容对网站SEO的影响
开发语言·前端·javascript·ecmascript
*才华有限公司*23 分钟前
《爬虫进阶之路:从模拟浏览器到破解动态加载的实战指南》
开发语言·python
深蓝电商API23 分钟前
爬虫+Redis:如何实现分布式去重与任务队列?
redis·分布式·爬虫·python
我是华为OD~HR~栗栗呀35 分钟前
华为OD-23届考研-测试面经
java·c++·python·华为od·华为·面试·单元测试
gc_229940 分钟前
学习Python中Selenium模块的基本用法(20:安装Selenium IDE)
python·selenium
敲代码的嘎仔43 分钟前
JavaWeb零基础学习Day4——Maven
java·开发语言·学习·算法·maven·javaweb·学习方法
W.Buffer1 小时前
设计模式-工厂模式:解耦对象创建的设计艺术
java·开发语言·设计模式
程序员爱钓鱼1 小时前
Python编程实战 · 基础入门篇 | 数据类型简介:数字、字符串、布尔值
后端·python
梵得儿SHI1 小时前
Java 注解与反射实战:自定义注解从入门到精通
java·开发语言·注解·自定义注解·元注解·控制注解的作用·声明式编程思想