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

ggplot中六边形分箱与矩形分箱结果不一致问题求助

问题原因分析

geom_hex和geom_bin2d的差异核心在于两者对bins参数的定义逻辑完全不同,加上六边形分箱的排列特性,导致可视化结果出现明显区别:

  • bins参数的定义差异

    • geom_bin2d(bins=100)是直接在x轴和y轴方向各划分100个等宽的矩形分箱,最终生成100×100的矩形网格。
    • geom_hex(bins=100)的bins参数实际指的是x方向的六边形列数,y方向的行数会根据坐标系的纵横比自动适配,不会强制为100。同时六边形分箱的范围计算会给数据边缘添加额外的padding,避免边缘的六边形被截断,这也会和矩形分箱的范围产生差异。
  • 六边形分箱的排列特性
    六边形网格是交错排列的,每个六边形的覆盖范围和矩形分箱的规则网格不同,即使调整到相近的分箱密度,视觉上的分布呈现也会有区别——尤其是在数据边缘区域,六边形的填充方式和矩形完全不同。

验证与解决方法

如果想让两者的分箱密度更接近,可以不用bins参数,改用binwidth手动指定分箱的宽度(六边形的binwidth对应六边形的直径):

library(ggplot2)
library(MASS)

df <- as.data.frame(mvrnorm(n=10000, mu=c(0, 0), Sigma=matrix(c(5, 3, 4, 4), ncol=2)))

# 手动指定binwidth,让两者分箱密度匹配
bin_width <- c(0.2, 0.2)
ggplot(df, aes(V1, V2)) + geom_hex(binwidth = bin_width)
ggplot(df, aes(V1, V2)) + geom_bin2d(binwidth = bin_width)

这样调整后,两张图的分布趋势会更一致,差异仅来自分箱形状的不同。

内容的提问来源于stack exchange,提问作者amr95

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:00:53