You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于两列数据调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:39:16