Может быть, это может помочь stat_summary_hex()
или stat_summary_2d()
.
Они похожи на stat_summary()
, данные разделены в ячейки с x
и y
, а затем суммированы по z
, используя функцию, указанную в stat_summary_hex()
(или stat_summary_2d()
).
library(tidyverse)
data.frame(x, y, z) %>%
# here you can specify the function that welcomes the z parameter
ggplot( aes(x, y, z=z )) + stat_summary_hex(fun = function(x) mean(x))
Он ответит на ваш второй вопрос(шестнадцатеричный) и ваш третий вопрос (кажется, хорошо с производительностью, как вы заявили), вместо использования geom_hex()
(так что, кажется, есть торговля между geom_hex()
и скоростью).
РЕДАКТИРОВАТЬ
Глядя на ваши вопросы, я микробенчмаркировал функцию с различными значениями:
Unit: milliseconds
expr min lq mean median uq max neval
3.5e5 205.0363 214.6925 236.8149 225.2286 238.6536 494.7897 100
1e6 575.4861 597.4161 665.4396 620.9151 702.1622 1143.7011 100
Кроме того, вы также можете указать ячейки, чтобы иметь больше или меньше "точные гексы.Значение по умолчанию должно быть 30, это означает, что он собирается построить точки в области 30 * 30 гексов:
data.frame(x, y, z) %>%
ggplot( aes(x, y, z=z )) + stat_summary_hex(fun = function(x) mean(x), bins = 60)
Как пример ( здесь функция multiplot()
, еслинеобходимо):
set.seed(1)
x <- rnorm(1e4, 0, 5)
y <- rnorm(1e4, 0, 10)
dist <- sqrt(x^2 + y^2)
z <- exp(-(dist / 8)^2)
library(tidyverse)
a1 <- data.frame(x, y, z) %>%
ggplot() + geom_point(aes(x, y, color = z))
b1 <- data.frame(x, y, z) %>%
ggplot( aes(x, y, z=z )) + stat_summary_hex(fun = function(x) mean(x))
c1 <- data.frame(x, y, z) %>%
ggplot( aes(x, y, z=z )) + stat_summary_hex(fun = function(x) mean(x), bins = 60)
multiplot(a1,b1,c1, cols = 3)
Как видите, чем больше вы добавляете гексов, тем больше вы приближаетесь к исходным точкам.
С данными:
x <- rnorm(1e4, 0, 5)
y <- rnorm(1e4, 0, 10)
dist <- sqrt(x^2 + y^2)
z <- exp(-(dist / 8)^2)