GOOGLE ADS

воскресенье, 8 мая 2022 г.

почему ggplot и geom_tile создают линии на карте?

Данные: https://github.com/yuliaUU/data/blob/main/test.csv

griddf <- read_csv("test.csv")

создать карту:

world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf") # add continents
ggplot()+
geom_tile(data = Data |> dplyr::filter(Model.1=="RF"), aes(x = Lon, y = Lat, fill= value/1000))+geom_sf(data=world)+
viridis:: scale_fill_viridis(option = "H", na.value = NA) +
labs(fill="Probability")+
facet_wrap(~ Model.1)

Моя проблема в том, что он создает карту с «линиями», которые я не понимаю, почему. Я знаю, что это как-то связано с неравномерной сеткой, которую я использую (все ячейки сетки должны быть одинаковой площади)

2

и когда я добавляю другую проекцию:

+ coord_sf(crs = '+proj=moll')

я ничего не замышляю

1


Решение проблемы

Вы в основном сами ответили на вопрос - ваши данные слишком детализированы. Для более «полного» вида вы можете захотеть 2D-интерполировать значения. Здесь я использую akima::interp, но есть и другие функции — здесь не место обсуждать, какие из них лучше использовать.

library(ggplot2)
griddf <- read.csv(url("https://raw.githubusercontent.com/yuliaUU/data/main/test.csv"))
world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf") # add continents
val_interpol <- with(griddf, akima::interp(Lon, Lat, value, xo = -180:180, yo = -90:90))
#> Warning in akima::interp(Lon, Lat, value, xo = -180:180, yo = -90:90): collinear
#> points, trying to add some jitter to avoid colinearities!
#> Warning in akima::interp(Lon, Lat, value, xo = -180:180, yo = -90:90): success:
#> collinearities reduced through jitter
## thanks Akrun https://stackoverflow.com/q/58123551/7941188
## matrix doesn't allow negative values for subsetting
d1 <- expand.grid(x = 1:361, y = 1:181)
out <- transform(d1, z = val_interpol$z[as.matrix(d1)])
out$x <- out$x-181
out$y <- out$y-91
ggplot()+
geom_raster(data = out, aes(x = x, y = y, fill= z), interpolate = TRUE)+
geom_sf(data=world)+
labs(title=paste0("Swordfish Probability of Occurance"),
x="", y="", subtitle="data from 2000-present (0.5x0.5 grid)")+
viridis:: scale_fill_viridis(option = "H", na.value = "black")

Создано 06 мая 2022 г. пакетом reprex (v2.0.1)

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...