如何使用ggplot或其他R包绘制以圆形替代色块的热图
圆形热图实现方案
完全可以实现,使用ggplot2的点图层即可完成需求,本质是将矩阵的行列索引作为x、y轴坐标,数值映射到圆形的填充色(也可同时映射大小)。
完整实现代码
1. 数据预处理
首先将你的向量转为指定行列的矩阵,再转换为ggplot适配的长格式:
# 加载所需包 library(ggplot2) library(reshape2) # 输入你提供的counts向量 counts <- c(1949, 1690, 1935, 2480, 1441, 1141, 2079, 1587, 517, 1028, 535, 2180, 1692, 3916, 1784, 3028, 1911, 1329, 1759, 1478, 1080, 2835, 2187, 3230, 2932, 3527, 1538, 1489, 1493, 1170, 3311, 4982, 4842, 4899, 1339, 3594, 2562, 1821, 1077, 1072, 4312, 3395, 3522, 1037, 3270, 4813, 1686, 1955, 3290, 1288, 2592, 3717, 213, 2840, 3938, 3882, 1807, 1582, 2519, 2600, 4093, 2318, 3028, 3074, 1833, 3453, 2539, 2665, 2491, 2696, 2819, 1177, 1707, 1832, 3223, 2366, 3742, 2648, 1594, 2112, 2239, 2840, 414, 1094, 2621, 3116, 1939, 2847, 1781, 1054, 1098, 1977, 1061, 2441, 2367, 723, 1126, 2550, 586, 515) # 转为10行10列的矩阵,可根据你的实际需求修改行列数,byrow控制按行/按列填充 mat <- matrix(counts, nrow = 10, ncol = 10, byrow = TRUE) # 转为长格式数据框 df <- melt(mat)
2. 绘制圆形热图
ggplot(df, aes(x = Var2, y = Var1)) + # shape=21为带边框的圆形,size控制圆形大小,fill映射数值颜色 geom_point(aes(fill = value), shape = 21, size = 10, color = "white") + # 反转y轴,符合热图惯例:第一行显示在画布顶部 scale_y_reverse() + # 自定义颜色方案,可替换为scale_fill_gradient2等你需要的配色 scale_fill_viridis_c() + # 基础主题设置 theme_minimal() + labs(x = "矩阵列索引", y = "矩阵行索引", fill = "数值大小") + # 去掉网格线,更接近传统热图样式 theme( panel.grid = element_blank(), axis.text = element_text(size = 10) )
自定义调整说明
- 若需要圆形大小也随数值变化:删除
geom_point中固定的size=10参数,在aes中添加size = value,可搭配scale_size_continuous(range = c(3, 15))调整大小范围 - 圆形样式调整:修改
shape参数,21~25均为支持填充色+边框色的点样式,也可设置color参数修改圆形边框颜色 - 行列标签修改:可提前给矩阵设置行名、列名,映射到x、y轴后即可显示自定义标签
内容的提问来源于stack exchange,提问作者Jeff238
相关产品推荐
相关产品推荐

