【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:

相关推荐
计算机编程指导师5 分钟前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan8 分钟前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe22 分钟前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码25 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
WeiXin_DZbishe43 分钟前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
沫璃染墨1 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子6662 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
imgsq2 小时前
电子学会考级 vs CCF-GESP:两套少儿编程考级怎么选
python·青少年编程
道尔柯南2 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法