2017-12-21 4 views
0

질량과 속도와 관련된 x, y 값과이 둘 사이의 에너지와 관련된 z 값으로 3D 행렬을 만들려고합니다. E 사용두 개의 변수 종속 관계 값에서 3D 행렬을 만드는 방법 - 운동 에너지

= 2분의 1 * m의 *의 V^2

하지만, I는 그 3D 행렬 주위 회전 얻을 모든 글 도움 페이지 세트와 연관된 Z 값을 갖는 고정 된 행 및 열이다.

나는 질량, 속도가 에너지와 어떤 관련이 있는지를 보여주는 3 차원 표면을 그래프로 나타 내기 위해 Plotly를 사용하려고합니다. 여기

내 초기 3 개 변수 :
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() 

그러나 나는이 밖으로 매트릭스를 작성하여 플롯 할 때. 작동하지 않습니다.

은 나뿐만 아니라 이것을 시도하고 제대로 수행하지 않는 플롯 :하지만,

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는 대량되고있는 표면 3D 플롯 될 것입니다 내가 무엇을 찾고의 최종 목표, Y는 속도 인 Z는 계산 된 에너지 임. 트렌드가 매끄럽고 질량과 속도가 모두 증가해야합니다.

답변

1

위 코드는 실제로 관심 영역 내의 한 행을 계산합니다. E의 첫 번째 요소는 m = 1 및 v = 1에 해당하고 E의 두 번째 요소는 m = 1.5 및 v = 1.05에 해당하지만 m = 1 및 v = 1.05 또는 다른 조합에 대해서는 E를 계산하지 않습니다. 플롯 함수가 서페이스를 보여줘야한다는 것입니다.

대신에 expand.grid과 같은 함수를 사용하여 m 및 v 값의 격자를 계산 한 다음 함께 계산하거나 outer 함수를 사용하여 매트릭스를 계산해야합니다.

1

Greg Snow처럼 언급되었지만 코드가 있습니다.

이것이 plotly 한 표면 플롯하고, 다른 하나를 사용으로 달성 될 수있는 두 가지 mesh3d를 사용하고 있습니다

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) 
여기

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 

수동 축 라벨을 수행해야합니다 하나는 그리드를 재 배열 할 필요가 있도록

플롯 mash3d는

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

enter image description here

표면 그림 값의 행렬을 받아 그리드가 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

관련 문제