我正在尝试使用3D表面图来分析结果作为输入函数的稳定性。 z是我的结果,x和y是参数值。使用格子的线框我可以使表面图没有问题,但是拥有plotly的交互式和可共享的功能会很不错。火山示例没有显示如何获取x,y,z坐标并制作表面图。谁知道如何简洁地做到这一点?这是格子线框示例和数据:
library(lattice)
z <- c(0.035, 0.043, 0.036, 0.037, 0.016, 0.013, 0.025, 0.037, 0.039, 0.043,
0.049, 0.029, 0.025, 0.02, 0.032, 0.045, 0.049, 0.043, 0.027, 0.031,
0.028,0.039, 0.038, 0.037, 0.045, 0.046, 0.04, 0.041, 0.037, 0.048, 0.048,
0.032, 0.03, 0.032, 0.029, 0.043, 0.056, 0.057, 0.046, 0.034, 0.035,
0.026,0.036, 0.048, 0.038, 0.032, 0.034, 0.027, 0.024, 0.041, 0.05, 0.056,
0.038, 0.027, 0.034, 0.027, 0.042, 0.054, 0.054, 0.039, 0.036, 0.029,
0.027,0.04, 0.052, 0.058, 0.051, 0.028, 0.025, 0.035, 0.037, 0.053, 0.059,
0.049, 0.044, 0.035, 0.021, 0.044, 0.059, 0.054, 0.052, 0.041, 0.032,
0.036,0.039, 0.051, 0.056, 0.038, 0.04, 0.022, 0.015, 0.043, 0.054, 0.052,
0.05, 0.031, 0.03, 0.03, 0.031, 0.044, 0.051, 0.047, 0.04, 0.038,
0.037,0.06, 0.071, 0.07, 0.066, 0.038, 0.031, 0.045, 0.064, 0.065, 0.074,
0.08, 0.052, 0.048, 0.041, 0.053, 0.072, 0.079, 0.071, 0.043, 0.059, 0.05,
0.061, 0.061, 0.055, 0.069, 0.07, 0.057, 0.057, 0.055, 0.074, 0.071, 0.051,
0.048, 0.05, 0.053, 0.069, 0.086, 0.085, 0.07, 0.047, 0.05, 0.047,0.055,
0.073, 0.065, 0.056, 0.054, 0.048, 0.043, 0.063, 0.078, 0.087, 0.068, 0.047,
0.052, 0.048, 0.065, 0.085, 0.084, 0.062, 0.049, 0.05, 0.05, 0.068, 0.084,
0.095, 0.089, 0.052, 0.052, 0.062, 0.062, 0.086, 0.09, 0.078, 0.062, 0.058,
0.038, 0.068, 0.095, 0.09, 0.082, 0.069, 0.057, 0.058,0.064, 0.082, 0.087,
0.055, 0.053, 0.032, 0.033, 0.067, 0.087, 0.087, 0.079, 0.058, 0.053, 0.057,
0.047, 0.069, 0.085, 0.075, 0.068, 0.063, 0.062,0.076, 0.089, 0.095, 0.086,
0.056, 0.053, 0.063, 0.082, 0.08, 0.099, 0.101, 0.067, 0.065, 0.058, 0.066,
0.086, 0.103, 0.088, 0.051, 0.072, 0.06, 0.08, 0.078, 0.067, 0.084, 0.086,
0.067, 0.066, 0.068, 0.087, 0.087, 0.071, 0.063, 0.065, 0.067, 0.087, 0.104,
0.108, 0.086, 0.057, 0.063, 0.056,0.064, 0.087, 0.084, 0.07, 0.063, 0.061,
0.06, 0.076, 0.095, 0.11, 0.088, 0.057, 0.062, 0.067, 0.079, 0.097, 0.105,
0.079, 0.055, 0.064, 0.066,0.087, 0.104, 0.12, 0.113, 0.063, 0.07, 0.075,
0.073, 0.104, 0.111, 0.091, 0.072, 0.07, 0.05, 0.083, 0.114, 0.11, 0.098,
0.083, 0.077, 0.07, 0.078, 0.098, 0.105, 0.069, 0.062, 0.045, 0.046, 0.083,
0.106, 0.106, 0.093, 0.077, 0.075, 0.073, 0.057, 0.088, 0.105, 0.094, 0.084,
0.082, 0.081)
x <- c(1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7,
10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10,13, 16, 19, 1,
4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16,
19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10,
13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4,
7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19,
1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13,
16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7,
10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1,
4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16,
19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10,
13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19,1, 4,
7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19,
1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10,13, 16, 19, 1, 4, 7, 10, 13,
16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7,
10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19, 1,
4, 7, 10, 13, 16, 19, 1, 4, 7, 10, 13, 16, 19)
y <- c(0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 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.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.2, 0.2, 0.2, 0.2,0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 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.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3,0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3)
wireframe(z ~ x * y, xlab="Parameter 1", ylab="Parameter 2", zlab="Fitness Value")
使用plotly我想做类似的事情,但它总是说z需要是一个矩阵。而且我不明白这是如何映射到x和y的。
library(plotly)
p <- plot_ly(x = x, y = y, z = z) %>% add_surface()
p
更好的是data.table示例,因为我的数据实际上是在data.table中,其中z是列,x和y是列,并且有大量其他参数列将用于地块。
df.ex <- data.table(Output=z,Input1=x,Input2=y,Input3=rnorm(315),Input4 =
abs(rnorm(315)+.5))
wireframe(df.ex$Output ~ df.ex$Input1 * df.ex$Input2)
答案 0 :(得分:3)
这样的事情效果很好。这是你想要的吗?
library(plotly)
data <- data.frame(x=x,y=y,z=z)
plot_ly() %>%
add_trace(data = data, x=data$x, y=data$y, z=data$z, type="mesh3d" )
答案 1 :(得分:0)
请参阅有关Github的讨论,Plotly表面三角剖分可以做什么和不能做什么: https://github.com/plotly/plotly.py/issues/2194#issuecomment-586917671
简而言之,问题在于当没有给出i,j,k坐标且没有给出alphahull
的值时,使用可绘制的默认参数进行的3D Delauney三角剖分。
为了将3D曲面绘制为实际的3D曲面,而没有3D Delauney三角剖分产生的附加面,您需要执行以下操作:
scipy.spatial.Delaunay
对生成的2d点进行三角测量。我认为在R中可以使用delaunayn
。该程序包与scipy.spatial