добавление плоского многоугольника в rasterVis

#r #3d #raster #rastervis

#r #3D #растр #rastervis

Вопрос:

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

Например, в таком сюжете (http://chenangliu.info/en/wp-content/uploads/2014/02/wireframe.jpg ) Я хотел бы добавить плоскую поверхность к фиолетовой области, а также точки, текст,…

Я обратил внимание на пакет rasterVis, который отлично рисует мой батиметрический растр. Однако я не знаю, как я мог бы добавить землю, просто как обычный 2D-полигон. Я попытался обойти эту проблему, установив значения сетки для площади суши равными нулю, но результат не идеален, потому что границы нерезкие, есть озера … которые не должны быть в 3D.

Так что это работает нормально:

 library(rasterVis)
pal<-colorRampPalette(c("darkblue","lightblue","green"))
    #----this doesn't help
     bathy[bathy>0,]=0
    #----
plot3D(bathy,col=pal)
 

Это не значит:

 polygon3d(europa)  # error: Error: n > 2 is not TRUE
 

Последняя функция не работает [idem для polygon()], как и другие мои попытки сделать это.
Я полагаю, это не так уж сложно сделать, но я не могу найти ни одного примера этого. Так что любые намеки будут приветствоваться.

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

1. Пожалуйста, сделайте ваш пример воспроизводимым. Рассмотрите возможность ссылки на ваш набор данных или его образец.

Ответ №1:

Вы должны использовать polygon3d в соответствии с его спецификациями. Поскольку вы не предоставляете данные для воспроизведения вашего кода, я использую пример со страницы справки plot3D :

 library(raster)
library(rasterVis)
library(rgl)

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

plot3D(r)
 

Теперь вы можете добавить 3D-полигон с функциями, определенными в пакете rgl :

 x <- c(30, 400, 400, 30)
y <- c(30, 30, 500, 500)

polygon3d(x, y, z=rep(100, 4), col = 'red')
polygon3d(x, y, z=rep(120, 4), col = 'blue')
polygon3d(x, y, z=rep(140, 4), col = 'black')