Это проблема, связанная с сеткой, используемой для биннинга.
Давайте использовать маленький пример.
set.seed(42)
x=runif(10^3)
y=runif(10^3)
z=rnorm(10^3)
new.data=data.frame(x,y,z)
library(ggplot2)
(g <- ggplot(data=new.data) +
stat_summary_2d(fun = mean, aes(x=x, y=y, z=z)) +
geom_point(aes(x, y)))
Теперь давайте увеличим поле в левом верхнем углу
g + coord_cartesian(xlim = c(0.02, 0.075), ylim = c(0.99, 1.035),
expand = FALSE)
Как видите, этот блок начинается ниже y = 1, но расширяется выше этого значения.
потому что вы складываете наблюдения в соответствии с некоторой пропускной способностью.
Такое же явление может произойти, если вы используете гистограмму.
ggplot(data.frame(x = runif(1000, 0, 1)), aes(x)) +
geom_histogram()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
В geom_histogram
этого можно избежать, установив аргумент boundary
до 0 и количество бинов, кратное общей длине.
ggplot(data.frame(x = runif(1000, 0, 1)), aes(x)) +
geom_histogram(boundary = 0, binwidth = 0.1)
Таким образом, решение в вашем случае состоит в том, чтобы установить binwidth на 1 / n, где n
целое число
ggplot(data=new.data) +
stat_summary_2d(fun = mean, aes(x=x, y=y, z=z), binwidth = 0.1) +
geom_point(aes(x, y))
Создано в 2018-11-04 пакетом представ. (v0.2.1.9000)