如何基于两列数据调整ggplot2中geom_tile的大小与颜色?
解决geom_tile瓦片大小随变量变化的问题
geom_tile本身没有size参数可直接映射变量,它默认在离散坐标轴上生成等宽等高的瓦片。要实现瓦片大小随X4变化的需求,我们可以用geom_rect替代geom_tile,手动计算每个瓦片的位置和宽高。
修改步骤
- 将离散的
X1、X2转换为数值型,用于定位瓦片中心 - 定义缩放因子,控制
X4对瓦片大小的影响幅度 - 用
geom_rect的xmin/xmax/ymin/ymax参数映射计算后的边界,实现大小随X4变化 - 保留原有的颜色映射、图例和主题设置
修改后的完整代码
library(ggplot2) library(dplyr) # 生成数据(保留原代码逻辑) var_1 = rep(c("a", "b", "c"), 3) a = rep("a", 3) b = rep("b", 3) c = rep("c", 3) var_2 = c(a, b, c) var_3 = c(1, 0, 0.5, 1, 1, 0, 1, 1, 0.5) var_4 = c(0.5, 1, 1, 1, 0, 0.5, 0, 0, 1) data_source <- data.frame(matrix(nrow = 9, ncol = 4)) data_source$X1 = var_1 data_source$X2 = var_2 data_source$X3 = var_3 data_source$X4 = var_4 # 处理数据:转换离散变量为数值,计算瓦片边界 plot_data <- data_source %>% mutate( x_num = as.numeric(factor(X1)), y_num = as.numeric(factor(X2)), # 缩放因子,可调整大小变化幅度,0.8是避免瓦片重叠的参考值 scale_size = 0.8, xmin = x_num - (0.5 * scale_size * X4), xmax = x_num + (0.5 * scale_size * X4), ymin = y_num - (0.5 * scale_size * X4), ymax = y_num + (0.5 * scale_size * X4) ) # 创建绘图 connectivity_plot <- plot_data %>% ggplot() + geom_rect( aes( xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = X3 ), color = "black", lwd = 1.5, linetype = 1 ) + # 还原离散坐标轴标签 scale_x_continuous(breaks = 1:3, labels = c("a", "b", "c")) + scale_y_continuous(breaks = 1:3, labels = c("a", "b", "c")) + labs( x = "x", y = "y" ) + scale_fill_gradientn( guide = "legend", breaks = c(1.0, 0.75, 0.5, 0), labels = c("TRUE", "TRUE WITH WARNINGS", "NOT TESTED", "FALSE"), colours = c("red", "white", "yellow", "green"), values = c(0, 0.5, 0.75, 1) ) + theme( axis.text = element_text(size = 18), axis.title = element_text(size = 22, face = "bold"), legend.text = element_text(size = 18), legend.title = element_text(size = 20, face = "bold"), legend.key.size = unit(1, "cm") ) + guides( fill = guide_legend(title="WORKS") ) print(connectivity_plot)
关键说明
scale_size可按需调整:值越大,瓦片最大尺寸越接近默认geom_tile的大小;值过小会导致瓦片过于紧凑- 转换离散变量为数值是为了精准控制瓦片中心位置,确保每个瓦片对应原
X1/X2的分类位置 geom_rect的边界计算保证了瓦片中心不变,仅宽高随X4线性变化
内容的提问来源于stack exchange,提问作者Tobias
相关产品推荐
相关产品推荐

