【发布时间】:2020-10-01 04:28:33
【问题描述】:
这与之前的帖子(ggplot hexbin shows different number of hexagons in plot versus data frame)略有不同。
我正在使用 hexbin() 将数据合并到六边形对象中,并使用 ggplot() 来绘制结果。我注意到,有时,情节边缘的六边形被切成两半。下面是一个例子。
library(hexbin)
library(ggplot2)
set.seed(1)
data <- data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100), D=rnorm(100), E=rnorm(100))
maxVal = max(abs(data))
maxRange = c(-1*maxVal, maxVal)
x = data[,c("A")]
y = data[,c("E")]
h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE, xbnds=maxRange, ybnds=maxRange)
hexdf <- data.frame (hcell2xy (h), hexID = h@cell, counts = h@count)
ggplot(hexdf, aes(x = x, y = y, fill = counts, hexID = hexID)) +
geom_hex(stat = "identity") +
coord_cartesian(xlim = c(maxRange[1], maxRange[2]), ylim = c(maxRange[1], maxRange[2]))
这将创建一个图形,其中一个六边形在顶部被切断,一个六边形在底部被切断:
我可以尝试的另一种方法是硬编码一个值(此处为 1.5)以添加到 x 和 y 轴的限制。这样做似乎确实解决了不再切断六边形的问题。
ggplot(hexdf, aes(x = x, y = y, fill = counts, hexID = hexID)) +
geom_hex(stat = "identity") +
scale_x_continuous(limits = maxRange * 1.5) +
scale_y_continuous(limits = maxRange * 1.5)
但是,即使第二种方法解决了这种情况下的问题,1.5 的值也是任意的。我正在尝试针对各种数据以及可以使用的各种箱尺寸和六边形尺寸自动化此过程。有没有一种解决方案可以让所有六边形在图中完全可见,而无需硬编码对于某些情况可能太大或太小的任意值?
【问题讨论】:
-
刚刚编辑了答案以包括手动设置箱数而不是箱宽的可能性