#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')