如何在R中使用ggplot绘制由红蓝方块组成的矩阵网格图
R 实现方案
核心思路
用geom_tile()绘制方块,将矩阵转换为ggplot要求的长格式数据后,手动映射one/two到对应颜色即可。
完整步骤
- 第一步:构造并转换数据
你可以选择base R或者tidyverse流派的转换方法,效果一致:
# 加载绘图必备包 library(ggplot2) # 构造原始矩阵 raw_mat <- matrix( c("one", "two", "two", "one", "one", "two", "one", "two", "one", "two", "two", "one", "two", "one", "two", "two", "one", "two"), nrow = 3, byrow = TRUE ) # ---------------base R 数据转换方法(无需额外装包)--------------- mat_df <- as.data.frame.table(raw_mat) colnames(mat_df) <- c("row", "col", "value") # ---------------tidyverse 数据转换方法(可选,适合习惯tidy语法的用户)--------------- # 需要提前加载 library(tibble) 和 library(tidyr) # mat_df <- as.data.frame(raw_mat) %>% # rownames_to_column("row") %>% # pivot_longer(-row, names_to = "col", values_to = "value")
- 第二步:绘制网格图
ggplot(mat_df, aes(x = col, y = rev(row))) + # 反转行顺序,保证矩阵第一行展示在图的上方,符合阅读习惯 geom_tile(aes(fill = value), color = "white", size = 1) + # color是方块分隔线颜色,size是分隔线粗细,可自行调整 scale_fill_manual(values = c("one" = "red", "two" = "blue")) + theme_void() + # 清除多余的坐标轴、背景等非核心元素 theme(legend.position = "none") # 不需要图例可保留此行,需要图例直接删除即可
可选调整
- 如果你需要保留行号列号,删除
theme_void()即可,ggplot会默认展示坐标轴标签 - 方块大小可以通过
coord_fixed(ratio = 1)调整,默认是等宽高的正方形
内容的提问来源于stack exchange,提问作者user15697038
相关产品推荐
相关产品推荐

