Я думаю, это потому, что 0 ваших данных в w
(белым) встречаются гораздо чаще и перекрывают другие значения всякий раз, когда они появляются позже в исходных данных, что заставляет их отображаться позже (сверху).
> table(dat$w)
# 0 1 2 3 4
#216449 557 383 74 1
Вы можете расположить свои данные так, чтобы они сначала отображали ноль, а старшие w
после:
ggplot(dat %>% arrange(w), aes(x,y, fill=w))+
....
Или вы можете построить график без нулей и определить диапазон построения с помощью coord_cartesian
, чтобы показать весь диапазон, что, похоже, дает довольно похожий результат.
ggplot(dat %>% filter(w != 0), aes(x,y, fill=w))+
geom_raster()+
scale_fill_gradient2(low = "white", mid='blue', high = "red",midpoint = 2, limit = c(0,4))+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank())+
coord_cartesian(xlim = range(dat$x), ylim = range(dat$y)) +
scale_x_continuous(breaks=seq(1,max(dat$x),10))+
scale_y_continuous(breaks=seq(1,max(dat$y),10))