#r #ggplot2 #graphics #r-grid #hexagonal-tiles
#r #ggplot2 #графика #r-сетка #шестиугольные плитки
Вопрос:
Я хотел бы объединить график hexbin с ggplot на разных панелях в R. Я могу подобраться поближе, но это все еще не работает:
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 и ggplot2 используют grid
графическую систему, что, по-видимому, подразумевает, что я мог бы использовать один из нескольких способов объединения панелей (например, как это сделать с разными пакетами). Однако пакет hexbin использует pushHexport
, что делает любое из этих решений неработоспособным.
Комментарии:
1. прошло много времени, но есть ли возможность, которую вы могли бы использовать
geom_hexbin()
изнутриggplot
для своего hexbin?2. Спасибо за предложение — я на самом деле только что наткнулся на geom_hexbin() . Похоже, это работает для решения этой проблемы, и это намного проще сделать по сравнению с борьбой с pushHexport().