Это происходит потому, что каждая точка должна иметь три значения для этого графика. У вас есть 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)
Надеюсь, это поможет!