我想绘制由 n 分层的3D数据d1
。感谢this answer到目前为止,我已经使用rgl
获得了以下解决方案,虽然我无法找到将绘图旋转到最佳视角的方法,但已经很好看了。在这方面更直接似乎是plotly
,其中可以用鼠标旋转图形。后者也已经具有我需要的相应图例的色调。虽然在这两方面我都不了解如何保存图表。如何将它编织成rmarkdown我打算做什么。我不依赖于特定的包,只需要以下内容:
这是我的尝试,数据如下。
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
})
E.g。 plotly
已经提供了色彩阴影和图例,这提供了非常丰富的信息,但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")
答案 0 :(得分:2)
就像对数据的不同观点一样 - 因为单个3D图中的四个表面看起来有点太忙 - 您可以尝试在value
上使用轮廓线和着色。 (我不确定您需要强调/分析数据集的哪个特定方面。)
library(tidyverse)
library(viridis)
data %>%
ggplot(aes(x, y)) +
geom_raster(aes(fill = value), interpolate = T) +
geom_contour(aes(z = value), bins = 15) +
facet_wrap(~ n, nrow = 1) +
scale_fill_viridis()
答案 1 :(得分:2)
您需要在情节中使用enum Gyr_Int_Set_Bits
{
HR_FILT = 0x80,
AM_FILT = 0x40,
HR_Z_AXIS = 0x20,
HR_Y_AXIS = 0x10,
HR_X_AXIS = 0x08,
AM_Z_AXIS = 0x04,
AM_Y_AXIS = 0x02,
AM_X_AXIS = 0x01,
};
...并且您的数据需要采用矩阵形式绘制表面图。这个阴谋网站有各种各样的情节文件。 https://plot.ly/r/3d-surface-plots/。要在SetGyroInterruptBits(34);
命令中仅设置一个色阶add_surface()
,然后为其中一个图重新打开。
showscale==FALSE
plotly
z <- lapply(unique(data$n),
function(x) as.matrix(reshape(data[data$n==x,-1],
idvar = "x", timevar = "y", direction = "wide") ))
plot_ly(showscale=FALSE) %>% add_surface(z=~z[[1]][, -1], cmin=min(data$value), cmax=max(data$value), showscale=TRUE) %>%
add_surface(z = ~z[[2]][, -1], cmin=min(data$value), cmax=max(data$value)) %>%
add_surface(z=~z[[3]][,-1], cmin=min(data$value), cmax=max(data$value)) %>%
add_surface(z~z[[4]][,-1], cmin=min(data$value), cmax=max(data$value))
未设置cmin
和cmax
的新情节,以便z值在所有阶层中均匀着色