我想打印3D数据
d1
其分层依据
n
. 幸亏
this answer
我实现了以下解决方案
rgl
到目前为止,这已经很好了,尽管我找不到一种方法来将情节旋转到最好的角度。在这方面,更直截了当的是
plotly
,可以使用鼠标旋转图形。后者也已经有了我需要的颜色阴影和相应的图例。虽然在这两方面,我都不知道如何保存图形响应。如何将其融入我的计划中。我不依赖于特定的软件包,只需要以下内容:
这是我的尝试,数据如下。
car::some(d1, 5)
# n x y value
# 37 1000 0.0 0.0 0.000000e+00
# 93 2000 0.3 0.2 2.500834e-04
# 101 2000 0.4 0.4 3.201067e-04
# 111 4000 0.0 0.2 2.400160e-05
# 142 4000 0.5 0.3 6.400427e-05
# change levels
levels <- levels(d1$n) # preserve for later
d1$n <- as.factor(as.numeric(d1$n))
# arrayer
arrayIt <- function(x){
# makes array of d1 by x, y, z
d <- sqrt(nrow(x)/length(unique(x[, 1]))) # dim. of matrices
ar <- array(NA, c(d, d, 3)) # init. array
ar[, , 1] <- matrix(x[, 2], d, d) # x
ar[, , 2] <- matrix(x[, 3], d, d) # y
ar[, , 3] <- matrix(x[, 4], d, d) # z
return(ar)
}
# list of 4 arrays for each n
ls1 <- lapply(seq_along(unique(d1[, 1])), function(n) arrayIt(d1[d1[, 1] == n, ]))
# plot
library(rgl)
lapply(seq_along(unique(d1$n)), function(i){
x <- ls1[[i]][,,1]
y <- ls1[[i]][,,2]
z <- ls1[[i]][,,3]
persp3d(x, y, z, col = i, alpha = .5, add = i > 1) # MARK
})
例如。
绘声绘色地
已经提供了颜色阴影和图例,这是非常丰富的信息,但
plot_ly
不会在
lapply
在上面,我也没有找到如何添加层的选项。
library(plotly)
plot_ly(x=x, y=y, z=z, type = "surface") # inserted at MARK didn't work
总之,期望的结果类似于两个图的交集。
数据:
data <- structure(list(n = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("500", "1000", "2000",
"4000"), class = "factor"), x = c(0, 0, 0, 0, 0, 0, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5,
0.5, 0.5, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4,
0.4, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 0, 0, 0,
0, 0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5,
0.5), y = c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4,
0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5,
0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1,
0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2,
0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3,
0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4,
0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5,
0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1,
0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2,
0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3,
0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0, 0.1, 0.2, 0.3, 0.4,
0.5), value = c(0, 0.000253671562082777, 0.00048064085447263,
0.000680907877169559, 0.000854472630173565, 0.00100133511348465,
0.000253671562082777, 0.00048064085447263, 0.000680907877169559,
0.000854472630173565, 0.00100133511348465, 0.0011214953271028,
0.00048064085447263, 0.000680907877169559, 0.000854472630173565,
0.00100133511348465, 0.0011214953271028, 0.00121495327102804,
0.000680907877169559, 0.000854472630173565, 0.00100133511348465,
0.0011214953271028, 0.00121495327102804, 0.00128170894526035,
0.000854472630173565, 0.00100133511348465, 0.0011214953271028,
0.00121495327102804, 0.00128170894526035, 0.00132176234979973,
0.00100133511348465, 0.0011214953271028, 0.00121495327102804,
0.00128170894526035, 0.00132176234979973, 0.00133511348464619,
0, 0.000126751167444963, 0.000240160106737825, 0.000340226817878586,
0.000426951300867245, 0.000500333555703803, 0.000126751167444963,
0.000240160106737825, 0.000340226817878586, 0.000426951300867245,
0.000500333555703803, 0.000560373582388259, 0.000240160106737825,
0.000340226817878586, 0.000426951300867245, 0.000500333555703803,
0.000560373582388259, 0.000607071380920614, 0.000340226817878586,
0.000426951300867245, 0.000500333555703803, 0.000560373582388259,
0.000607071380920614, 0.000640426951300867, 0.000426951300867245,
0.000500333555703803, 0.000560373582388259, 0.000607071380920614,
0.000640426951300867, 0.000660440293529019, 0.000500333555703803,
0.000560373582388259, 0.000607071380920614, 0.000640426951300867,
0.000660440293529019, 0.00066711140760507, 0, 6.33544514838279e-05,
0.000120040013337779, 0.000170056685561854, 0.000213404468156052,
0.000250083361120373, 6.33544514838279e-05, 0.000120040013337779,
0.000170056685561854, 0.000213404468156052, 0.000250083361120373,
0.000280093364454818, 0.000120040013337779, 0.000170056685561854,
0.000213404468156052, 0.000250083361120373, 0.000280093364454818,
0.000303434478159386, 0.000170056685561854, 0.000213404468156052,
0.000250083361120373, 0.000280093364454818, 0.000303434478159386,
0.000320106702234078, 0.000213404468156052, 0.000250083361120373,
0.000280093364454818, 0.000303434478159386, 0.000320106702234078,
0.000330110036678893, 0.000250083361120373, 0.000280093364454818,
0.000303434478159386, 0.000320106702234078, 0.000330110036678893,
0.000333444481493831, 0, 1.26675111674112e-05, 2.40016001066738e-05,
3.40022668177879e-05, 4.26695113007534e-05, 5.00033335555704e-05,
1.26675111674112e-05, 2.40016001066738e-05, 3.40022668177879e-05,
4.26695113007534e-05, 5.00033335555704e-05, 5.60037335822388e-05,
2.40016001066738e-05, 3.40022668177879e-05, 4.26695113007534e-05,
5.00033335555704e-05, 5.60037335822388e-05, 6.06707113807587e-05,
3.40022668177879e-05, 4.26695113007534e-05, 5.00033335555704e-05,
5.60037335822388e-05, 6.06707113807587e-05, 6.40042669511301e-05,
4.26695113007534e-05, 5.00033335555704e-05, 5.60037335822388e-05,
6.06707113807587e-05, 6.40042669511301e-05, 6.60044002933529e-05,
5.00033335555704e-05, 5.60037335822388e-05, 6.06707113807587e-05,
6.40042669511301e-05, 6.60044002933529e-05, 6.66711114074272e-05
)), .Names = c("n", "x", "y", "value"), row.names = c(NA, -144L
), class = "data.frame")