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
相关产品推荐
相关产品推荐

