Если я правильно понимаю, вы ищете expand.grid()
:
xy <- expand.grid(X=X,Y=Y)
z<-rnorm(nrow(xy),0.5,1)
df<-as.data.frame(cbind(xy,z)) # create data frame with a z value for each cells (X,Y)
head(df)
pl<-ggplot(data=df,aes(x=X,y=Y,z=z))+stat_summary_hex(fun=function(x) sum(x))
plot(pl)
Что касается второго вопроса, я не уверен, но поскольку все шестиугольники имеют одинаковый размер и для их центрирования потребуется одна и та же операция, вы можете сдвинуть их равномерно, изменив соответственно X
и Y
. Возможно, это можно сделать и с помощью аргументов, не уверен.
[[Edit 23 июля]] второй вопрос заключался в том, как получить data.frame
шестнадцатеричных координат. Пришлось немного покопаться, но вот пример:
library(hexbin)
coords <- hcell2xy( hexbin(x=X,y=Y))
head(coords)
x y
1 -10.0 35.00000
2 -9.5 35.86603
3 -8.5 35.86603
4 -9.0 36.73205
5 -8.0 36.73205
6 -7.5 37.59808
hcell2xy()
- ключевая функция, вызываемая ggplot2
, и вам может потребоваться явное указание аргумента xbins
, который определяется автоматически внутри ggplot2
, но, по-видимому, по умолчанию равен 30 в обоих случаях.
[[Изменить 3, чтобы включить z-уровень]] Это ответ на комментарий, в котором также запрашиваются z-уровни. Разорвано с ggplot2:::hexBin
hb <- hexbin(x=X,y=Y)
# Convert to data frame
data.frame(
hcell2xy(hb),
count = hb@count,
density = hb@count / sum(hb@count, na.rm=TRUE)
)
Вы можете выбрать, использовать ли count
или density
для цветов позже, но предупреждение: они отличаются от вашей z
переменной, переданной в ggplot2
. Если вы хотите подвести итоги на основе какой-либо другой статистики, я предлагаю вам также изучить внутреннюю часть этих функций, чтобы увидеть, как все происходит. Я этим и занимаюсь.
person
tim riffe
schedule
19.07.2014