Растровая карта поверхности в R - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь создать трехмерную растровую карту ночников со значениями, представленными как высота (карта поверхности с выступами, представляющими значение). Я уже обрезал растр, и пока мой код для проецирования карты в 2D выглядит, как показано ниже, но не знаю, как добавить 3D или какую функцию мне использовать.

ras_df <- as.data.frame(crop_raster, xy=TRUE, na.rm=TRUE)
colnames(ras_df) <- c("x", "y", "value")
ras_df$log_value_plus1 <- log(ras_df$value+1)

fig <- ggplot() +
  geom_raster(data=ras_df, aes(x=x,y=y, fill=log_value_plus1), alpha=1) +
 
  geom_polygon(data=shapfile_fortified, aes(x=long, y=lat, group=group), 
               fill=NA, color="grey60", size=0.25) +
   coord_quickmap()
  

UPDATE!

Я следую инструкциям, предложенным с помощью plotly, но получаю пустую матрицу.

raster_new<-raster::as.matrix(crop_raster)
class(raster_new)
#matrix
plot_ly(z = ~raster_new) %>% add_surface()

#same empty matrix using
plot_ly(z = raster_new,  type="surface",showscale=FALSE)

Result

I tested persp(raster_new) and it gives me a similar result I would like to have but with no 3D movement, small and all dark (so no useful). This are the dimensions of my raster:

persp(raster_new)

введите описание изображения здесь

Я не уверен, что происходит не так, когда матрица обрабатывается с помощью plotly. Ниже моя растровая информация

class      : RasterLayer 
dimensions : 4352, 4959, 21581568  (nrow, ncol, ncell)
resolution : 0.004166667, 0.004166667  (x, y)
extent     : -8.672916, 11.98958, 18.96042, 37.09375  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
source     : light_raster_2016_.tif 
names      : light_raster_ALG_2016_ 
values     : 0, 21980.4  (min, max)

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы можете сделать

library(raster)
r <- raster(volcano)
extent(r) <- c(0, 610, 0, 870)

persp(r)

Или, если вы хотите взаимодействовать с ним

library(rasterVis)
library(rgl)
plot3D(r, col = rainbow)

Что открывает устройство rgl на вашем компьютере:

введите описание изображения здесь

1 голос
/ 12 июля 2020

Base R предоставляет persp() для 3D-визуализации матриц, а plotly предлагает приятные интерактивные возможности 3D.

Это означает, что вам необходимо передать объект матрицы классов этим функциям. Я считаю, что вы можете преобразовать RasterLayer из пакета raster в матрицу с as.matrix(my_raster). Используйте class(my_converted_raster), чтобы проверить, действительно ли это матрица.

Используя встроенные данные volcano (уже матрицу):

persp(volcano)

enter image description here

library(plotly)
plot_ly(z = ~volcano) %>% add_surface()

введите описание изображения здесь

...