Как установить показ пространства в сюжете - PullRequest
0 голосов
/ 19 января 2020

Есть ли способ установить вид и оси таким образом, чтобы на моем трехмерном графическом графике я мог видеть конкретное пространство c и в этом пространстве график двигался? Я пытаюсь сделать анимацию, которая показывает, как работает детектор, но сейчас, когда я играю свою анимацию, вид и оси меняются вместе с графиком. Я знаю, что могу изменить диапазон оси, но каким-то образом это ничего не изменило в моих выходных данных или, возможно, я что-то делал не так. Вот мой код:

library(plotly)
Sx <- matrix()
Sy <- matrix()
Sz <- matrix()
N <- 360
u = seq(0, pi/2, length.out = 30) 
w = seq(0, 2*pi, length.out = N)

datalist = list()

for (i in 1:N) {
  Sx = cos(u) * cos(w[i])
  Sy = cos(u) * sin(w[i])
  Sz = sin(u)

  df <- data.frame(Sx, Sy, Sz, t=i)
  datalist[[i]] <- df
}
data = do.call(rbind, datalist)
plot_ly(data, x=~Sx, y =~Sy, z=~Sz, frame=~t, type = 'scatter3d', mode = 'lines')

1 Ответ

1 голос
/ 20 января 2020

Добро пожаловать в stackoverflow!

Я не уверен, правильно ли я понимаю ваш вопрос. Тем не менее, я думаю, что вы ищете комбинацию range и aspectratio.

Пожалуйста, проверьте следующее:

library(plotly)
Sx <- matrix()
Sy <- matrix()
Sz <- matrix()
N <- 360
u = seq(0, pi/2, length.out = 30) 
w = seq(0, 2*pi, length.out = N)

datalist = list()

for (i in 1:N) {
  Sx = cos(u) * cos(w[i])
  Sy = cos(u) * sin(w[i])
  Sz = sin(u)

  df <- data.frame(Sx, Sy, Sz, t=i)
  datalist[[i]] <- df
}
data = do.call(rbind, datalist)
plot_ly(data, x=~Sx, y =~Sy, z=~Sz, frame=~t, type = 'scatter3d', mode = 'lines') %>%
  layout(scene = list(xaxis = list(nticks = 5, range = c(-1, 1)),
                      yaxis = list(nticks = 5, range = c(-1, 1)),
                      zaxis = list(nticks = 5, range = c(-1, 1)),
                      aspectmode='manual',
                      aspectratio = list(x=1, y=1, z=1)
                      )) %>% animation_opts(frame = 100)

Result

Для получения дополнительной информации см. this .

...