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

相关推荐
крон12 分钟前
【Auto.js例程】华为备忘录导出到其他手机
开发语言·javascript·智能手机
zh_xuan1 小时前
c++ 单例模式
开发语言·c++·单例模式
老胖闲聊1 小时前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1181 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之2 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
豆沙沙包?2 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
军训猫猫头2 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
lyaihao3 小时前
使用python实现奔跑的线条效果
python·绘图
liuyang-neu3 小时前
java内存模型JMM
java·开发语言
ai大师3 小时前
(附代码及图示)Multi-Query 多查询策略详解
python·langchain·中转api·apikey·中转apikey·免费apikey·claude4