首页 > 解决方案 > hexbin 和 ggplot 在不同的面板中

问题描述

我想在 R 的不同面板中将 hexbin 图与 ggplot 结合起来。我可以接近,但它仍然无法正常工作:


library(hexbin)
library(ggplot2)
library(grid)

x1 <- rnorm(100)
y1 <- rnorm(100)

x2 <- rnorm(100, 1, 0.2)
y2 <- rnorm(100, 1, 0.2)


# combined hexbins
xbnds <- range(c(x1, x2))
ybnds <- range(c(y1, y2))
xbins <- 20

h1 <- hexbin(x1, y1, xbins=xbins, xbnds=xbnds, ybnds=ybnds)
h2 <- hexbin(x2, y2, xbins=xbins, xbnds=xbnds, ybnds=ybnds)

# ggplot
df <- data.frame(x1=x1, y1=y1)
g <- ggplot(df, aes(x=x1, y=y1)) + geom_point(aes(x=x1, y=y1))

### KINDA WORKS

grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
pushViewport(viewport(layout.pos.col=1, layout.pos.row=1))
print(g)

pushViewport(viewport(layout.pos.col = 2, layout.pos.row = 1))
plotFrame <- plot(h1, type='n', newpage=FALSE)
pushHexport(plotFrame$plot.vp, clip='on')
grid.hexagons(h1, style='constant.col', border='white', pen='blue')
grid.hexagons(h2, style='constant.col', border='white', pen='red')

我认为其中一个复杂的问题是,如您所见,我在同一个图中覆盖了两个 hexbin 对象。这是我得到的:

在此处输入图像描述

我希望散点图(ggplot)位于左侧,而 hexbin 图位于右侧面板中,如下所示(手动制作):

在此处输入图像描述

我认为其中一个复杂的问题是,如您所见,我在同一个图中覆盖了两个 hexbin 对象。

我的理解是 hexbin 和 ggplot2 包都使用grid图形系统,这似乎意味着我可以使用几种方法之一来组合面板(例如,如何使用不同的包来做到这一点)。但是, hexbin 包使用pushHexport,这使得这些解决方案中的任何一个都不可行。

标签: rggplot2graphicsr-gridhexagonal-tiles

解决方案


推荐阅读