2017-12-21 5 views
0

質量と速度に関するx、y値とその2つの間のエネルギーに関連するz値を持つ3D行列を作成しようとしています。 E = 1/2×m個の*のV^22つの変数に依存する関係から値を3D行列にする方法 - キネティックエネルギー

を使用して

はしかし、私はそれが3Dマトリックスを中心に展開し得るすべての投稿やヘルプページには、関連するZ値とセットと固定行と列です。

私は、質量、速度がどのようにエネルギーに関連しているかを本質的に示す3d平面をグラフ化するためにPlotlyを使用しようとしています。

m <- seq(1,100,0.5) 
v <- seq(1,10,0.05) 
E <- .5 * m * v^2 

mat <- matrix(data=E, nrow=m, ncol=v) 
plot_ly(z=~mat) %>% add_surface() 

しかし、私はこのうちのマトリックスを作成し、それをプロットしてみたときに:ここで

は私の最初の3つの変数です。それは動作しません。

私もこれを試してみましたが、それはプロットではなく、正しく:

df <- data.frame(m=m, v=v, E=E) 
plot_ly(z=~data.matrix(df)) %>% add_surface() 

は、誰もがこれで私を助けてくださいことはできますか?おかげ

私は基本的に次のようになります行列を探しています:

 [1, ] [2,] # mass 
[,0.5] E1 E2 # energy 
[,1 ] E3 E4 # values 
#velocity 

xが大量であることと、表面の3次元プロットになるだろう、私が探していますの最終目標、yは速度であることZは計算されたエネルギーである。それは、滑らかな表面の上昇傾向を示し、質量と速度の両方が増加するはずです。

答えて

1

あなたのコードは実際に興味のある空間内の1行を計算しています。 Eの最初の要素はm = 1およびv = 1に対応し、Eの2番目の要素はm = 1.5およびv = 1.05に対応しますが、m = 1およびv = 1.05の場合はどこでもEを計算しません。プロット関数がサーフェスを表示する必要があることを示します。

代わりにexpand.gridのような関数を使用して、mとv値のグリッドを計算してから計算するか、outer関数を使用して行列を計算する必要があります。

1

グレッグスノーと同じようにコードが記述されています。

2つの方法が、これは表面プロットを使用しており、他の一つはmesh3dを使用しているplotlyいずれかで達成することができるがあります

mesh3dを:

library(plotly) 

は(MおよびV値のグリッドを作ります私は)それビットまばらに作られた:

z <- expand.grid(m = seq(1,100,1), 
       v = seq(1,10,0.1)) 

エネルギー

z$E <- with(z, .5 * m * v^2) 
を計算します

1がグリッドを再配置する必要があるので、プロットmash3d

plot_ly(data = z, x = ~m, y = ~v, z = ~E, type = 'mesh3d') 

enter image description here

表面プロットは、値の行列を受け付けます。ここでは

library(tidyverse) 
z <- expand.grid(m = seq(1,100,1), 
       v = seq(1,10,0.1)) 

z %>% 
     mutate(E = .5 * m * v^2) %>% 
     spread(key = v, value = E) %>% 
     as.matrix() -> mat 

手動軸のラベル付けを行う必要がありますグリッドが1:nであると仮定するので、nは行と列の数です。

plot_ly() %>% 
    add_surface(z = mat, x = unique(z$m), y = unique(z$v)) %>% 
    layout(scene = list(xaxis = list(title = "m"), 
         yaxis = list(title = "v"), 
         zaxis = list(title = "E"))) 

enter image description here

関連する問題