在R中生成3D曲面图

时间:2017-10-04 07:32:49

标签: r ggplot2 plotly ggplotly

我有一个数据框,包含4个变量ABCD,我需要为x = A绘制3D表面图,y = Bz = C。我的问题是该图应该包含3 surfaces,该DD中的值相关,即0的值为1-1和{{1}我需要为3个不同的D值设置3个曲面。

我在sub setting数据框中尝试了3个不同的数据框,相对于D的值并将表面添加到plot_ly函数,但它似乎无法正常工作,我变得空白图形。我不知道我是否使用了正确的绘图功能。

以下是我的数据框d1

               A       B          C              D  
             734.5  2.28125     3.363312755      0    
             738    2.53125     3.395864326      0  
             727.25 2.484375    3.41183431       1
             737    2.421875    3.380499188      1
             727.25 2.3828125   3.39538442       1
             933.25 4.6875      3.148660474      1
             932.75 4.671875    3.155840809      1
             934    4.671875    3.165391107      1
             920.75 4.671875    3.194808475      1
             913.25 4.671875    3.22907393       1
             896.75 4.671875    3.287157844      1
             880    4.671875    3.341203642     -1
             866.75 4.59375     3.388017143     -1
             714.5  3.296875    3.572828317     -1
             730.75 3.296875    3.535364241     -1
             734.75 3.296875    3.526142314     -1
             713.25 3.7734375   3.653888449     -1
             711.75 3.8203125   3.665152882     -1
             711.75 3.8125      3.65967422      -1
             714    3.796875    3.630867839      0
             754.25 3.796875    3.560165628      0
             715.25 3.78125     3.650415301      0

以下是我的R代码

library(plotly)

pd1 <- subset(d1, (D == 1))
nd1 <- subset(d1, (D == -1))
zd1 <- subset(d1, (D == 0))  

p <-  plot_ly(showscale = FALSE) %>%
       add_surface(x= pd1$A,y = pd1$B, z = pd1$C)%>% 
        add_surface(x= nd1$A,y =nd1$B, z = nd1$C)%>% 
       add_surface(x= zd1$A,y =zd1$B, z = zd1$C)%>%

1 个答案:

答案 0 :(得分:2)

我认为您必须将数字矩阵作为参数传递给add_surface

pd1_ma <- as.matrix(pd1)
nd1_ma <- as.matrix(nd1)
zd1_ma <- as.matrix(zd1)


p <- plot_ly(showscale = FALSE) %>%
  add_surface(z = ~pd1_ma) %>%
  add_surface(z = ~nd1_ma, opacity = 0.98) %>%
  add_surface(z = ~zd1_ma, opacity = 0.98)
p

这对我有用。