Ответ 1
Сначала спасибо за этот вопрос и за то, что разделили этот сюжет с большим воображением!
Вот попытка с использованием пакета lattice
. В основном я реализую вам идею: окрашивание шестиугольников в сюжет (h, style = "решетка" ) с помощью pts/try ". Использование решетки также мотивируется тем, что вы можете использовать функции grid
в рамках функций решетчатой панели (например, для рисования наземных деталей)
Я генерирую некоторые данные
dat <- data.frame(
xCoord = round(runif(1000,-30,30),2),
yCoord = round(runif(1000,-2,30),2),
pts = sample(c(0,2,3),100,rep=T))
#dat$pts[dat$xCoord <0 & dat$yCoord] <- 3
здесь сюжет:
xyplot(yCoord~xCoord,data =dat , panel = function(x,y,...)
{
hbin<-hexbin(dat$xCoord,dat$yCoord,xbins=50,IDs=TRUE)
mtrans<-hexTapply(hbin,dat$pts,sum,na.rm=TRUE)
cols <- rainbow( 4,alpha=0.5)
grid.hexagons(hbin, style='lattice',
,minarea=0.5,maxarea=5,colorcut=c(0,.6,1),
border=NA,
pen=cols[mtrans+1])
## Now you can get fun to draw the ground here
## something like...
## grid.circle(gp=gpar(fill=NA))
})
EDIT Использование OP real данные. Я получаю этот сюжет. Вам нужно сыграть с minarea
и `` maxarea argument to define overlapping regions. I add also an image as abckground using
grid.raster`. У меня нет навыков сюжета, поэтому я выбираю один из них, но вы можете использовать эту технику, чтобы добавить землю. Я уверен, что вы можете сделать лучший образ.
library(lattice)
library(hexbin)
library(png)
xyplot(locationY~locationX,data =dat , panel = function(x,y,...)
{
## imgae bakground
m <- readPNG('basket.png')
rimg <- as.raster(m)
grid.raster(rimg, x=0, y=61.5, just="top", width=50,
default.units = "native")
panel.fill(col=rgb(1,1,1,alpha=0.8))
hbin<-hexbin(dat$locationX,dat$locationY,xbins=50,IDs=TRUE)
mtrans<-hexTapply(hbin,dat$Points,sum,na.rm=TRUE)
cols <- rainbow(4)
grid.hexagons(hbin, style='lattice',
,minarea=0.1,maxarea=50,colorcut=c(0,.6,1),
border=NA,
pen=cols[mtrans+1])
})