2017-10-04 81 views
1

三维曲面图我有其由4个变量ABCD,我需要绘制三维表面曲线为x = Ay = Bz = C的数据帧。我的问题是情节应该包含3 surfaces这是相对于D的值,即D具有值0,1-1我需要有3个表面为D的3个不同的值。生成中的R

我试了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

我认为你必须为数字矩阵作为参数传递给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 

这是为我工作。