簡體   English   中英

使用 R 中的 Plot3D 包增加 3D 曲面圖厚度

[英]Increasing 3D surface plot thickness using the Plot3D package in R

有沒有辦法使用 R 中plot3D包中的persp3D()函數來增加 3D 表面圖的厚度,就像這里的圖一樣? 似乎無法在文檔中找到任何內容。

我能夠通過創建多個表面並使用 plot3D 函數的curtain參數連接它們來實現這一點。 厚度由每個表面的z參數控制。 如果有人需要示例代碼,這里是;

為簡單起見,我使用米來指定表面的厚度/高度

library(plot3D)
library(plot3Drgl)

# volcano data range
clim <- range(volcano)

# Surface 1
persp3D(z = volcano, zlim = c(0, 600), clim = clim, 
        box = FALSE, plot = FALSE, curtain = TRUE, border = "black")

# Surface 2 - 20m below surface 1
persp3D(z = volcano - 20, clim = clim, colvar = volcano, 
        add = TRUE, colkey = FALSE, plot = FALSE, curtain = TRUE, border = "black")

# Surface 3 - 40m below surface 1
persp3D(z = volcano - 40, clim = clim, colvar = volcano, 
        add = TRUE, colkey = FALSE, plot = FALSE, curtain = TRUE, border = "black")

# Surface 4 - 60m below surface 1
persp3D(z = volcano - 60, clim = clim, colvar = volcano, 
        add = TRUE, colkey = FALSE, plot = TRUE, curtain = TRUE, border = "black")

# Surface 5 - 80m below surface 1
persp3D(z = volcano - 80, clim = clim, colvar = volcano, 
        add = TRUE, colkey = FALSE, plot = TRUE, curtain = FALSE, border = "black")

# Open rgl for interactive viewing
plotrgl()

在此處輸入圖片說明

我不知道plot3D ,但rgl沒有特定的功能。 這樣做的方法是計算與平板邊緣相對應的多邊形,並使用polygon3d繪制這些多邊形。 例如:

data(volcano)
persp3d(volcano, col = "green")

# The bottom of the slab
persp3d(volcano-10, col = "blue", add = TRUE)

minx <- 0
maxx <- 1
miny <- 0
maxy <- 1

m <- nrow(volcano)
n <- ncol(volcano)

# The front edge
edgex <- c(seq(minx, maxx, length.out = m),
           seq(maxx, minx, length.out = m))
edgey <- miny
edgez <- c(volcano[,1],rev(volcano[,1] - 10))
polygon3d(cbind(edgex, edgey, edgez), coords = c(1,3), 
          col = "yellow")

# The back edge
edgey <- maxy
edgez <- c(volcano[,n],rev(volcano[,n] - 10))
polygon3d(cbind(edgex, edgey, edgez), coords = c(1,3), col = "white")

edgex <- minx
edgey <- c(seq(miny, maxy, length.out = n),
           seq(maxy, miny, length.out = n))
edgez <- c(volcano[1,],rev(volcano[1,] - 10))
polygon3d(cbind(edgex, edgey, edgez), coords = c(2,3), col = "black")

edgex <- maxx
edgez <- c(volcano[m,],rev(volcano[m,] - 10))
polygon3d(cbind(edgex, edgey, edgez), coords = c(2,3), col = "green")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM