R: 4D график, x, y, z, цвета с x, y, z различной длины - PullRequest
0 голосов
/ 17 мая 2018

У меня есть матрица 30 * 16 * 9, которую я хотел бы визуализировать с помощью 4-D графика в R. Я пробовал scatter3D в пакете plot3d и scatterplot3d.

      x <- seq(10, 300, 10)
      y <- seq(5.0, 20.0, 1.0)
      z <- c(seq(0.5, 4, 0.5), 10)
      scatter3D(x, y, z, colvar = data)

Всегда выдает ошибку, говорящую, что «у» должно иметь ту же длину, что и «х».Как с этим бороться?Почему x, y, z должны быть одинаковой длины?это так неудобно

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы говорите, что у вас есть матрица, но у вас есть три вектора.Сначала вам нужно создать «матрицу» (здесь мы создадим data.frame с именем df, используя expand.grid):

x <- seq(10, 300, 10)
y <- seq(5.0, 20.0, 1.0)
z <- c(seq(0.5, 4, 0.5), 10)

df <- expand.grid(x = x, y = y, z = z)

Затем мы можем построить график с помощью функции scatter3d из car упаковка с использованием любого метода:

car::scatter3d(x ~ y + z, data = df)
car::scatter3d(df$x, df$y, df$z)

3d plot

0 голосов
/ 17 мая 2018

Это происходит потому, что каждая точка должна иметь три значения для этого графика. У вас есть 30 значений для x, 16 значений для y и 9 значений для z. С этими данными только первые 9 точек будут иметь значение x-y-z. В комментариях к вашему вопросу eipi10 дает очень хорошее объяснение по этому поводу. Альтернативой, например, является интерполяция данных для создания пропущенных значений. Подробнее об интерполяции данных .

library("plot3D")
number_of_points <- 50
xx <- seq(10, 300, 10)
yy <- seq(5.0, 20.0, 1.0)
zz <- c(seq(0.5, 4, 0.5), 10)

xx <- approx(x = xx, method="linear", n=number_of_points, ties = mean)$y
yy <- approx(x = yy, method="linear", n=number_of_points, ties = mean)$y
zz <- approx(x = zz, method="linear", n=number_of_points, ties = mean)$y

scatter3D(xx, yy, zz)

Надеюсь, это поможет!

...