Трехмерный сюжет не имеет пропорциональной длины линий - PullRequest
0 голосов
/ 10 октября 2019

Я создаю трехмерный категоризированный график с кодом ниже. Как видно из диапазона примеров, диапазон вектора Z находится в диапазоне от 0 до 5, а диапазон вектора X находится в диапазоне от 0 до 20. Я хочу видеть их в 3D не в виде квадрата, а в видеТип прямоугольника трехмерной фигуры, потому что длина X больше, чем у Z, например. Как я могу сделать в сюжете сделать длину линий исходя из диапазона значений. (Таким образом, длина линий на графике основана на их пропорциональной длине)

Я использую решетку, но решение в GGPLot также возможно

Z<-(sample.int(101,size=100,replace=TRUE)-1)/20
Y<-(sample.int(101,size=100,replace=TRUE)-1)/10
X<-(sample.int(101,size=100,replace=TRUE)-1)/5
boxplot(Z)
cat <- c(rep("A",0.1*100),rep("B",0.2*100),rep("C",0.65*100),rep("D",0.05*100))
cat <- sample(x, 100)
df <- data.frame(X, Y, Z, cat)
library(lattice)
cloud(Z ~ Y * X,  group = cat, data = df, auto.key = TRUE)  

1 Ответ

1 голос
/ 10 октября 2019

Try

cloud(Z ~ Y * X,  group = cat, data = df, auto.key = TRUE,
  aspect=c(2,.5)) 

From ?cloud:

aspect принимается за числовой вектор длины 2, давая относительные аспекты размера y/ x-size и z-size / x-size вмещающего куба.

Это для формулы вида z ~ x * y. Обратите внимание, что у вас есть Z ~ Y * X, поэтому определения переключаются.

РЕДАКТИРОВАТЬ: Вы также можете рассчитать относительные размеры с помощью что-то вроде

cloud(Z ~ Y * X,  group = cat, data = df, auto.key = TRUE,
    aspect=c(diff(range(X))/diff(range(Y)),diff(range(Z))/diff(range(Y))))
...