2017-10-04 108 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 

這是爲我工作。