5-мерный участок в r

Я пытаюсь построить 5-мерный график в R. В настоящее время я использую пакет rgl для построения моих данных в 4 измерениях, используя 3 переменные в качестве координат x, y, z, другую переменную в качестве цвета, Мне интересно, могу ли я добавить пятую переменную, используя этот пакет, например, размер или форму точек в пространстве. Вот пример моих данных и мой текущий код:

set.seed(1)
df <- data.frame(replicate(4,sample(1:200,1000,rep=TRUE)))
addme <- data.frame(replicate(1,sample(0:1,1000,rep=TRUE)))
df <- cbind(df,addme)
colnames(df) <- c("var1","var2","var3","var4","var5")
require(rgl)
plot3d(df$var1, df$var2, df$var3, col=as.numeric(df$var4), size=0.5, type='s',xlab="var1",ylab="var2",zlab="var3")

Надеюсь, можно сделать 5-е измерение. Большое спасибо,

Ответ 1

Вот параметр ggplot2. Я обычно уклоняюсь от 3D-графиков, поскольку их трудно интерпретировать должным образом. Я также почти никогда не ставил 5 непрерывных переменных в том же сюжете, что и здесь...

ggplot(df, aes(x=var1, y=var2, fill=var3, color=var4, size=var5^2)) +
  geom_point(shape=21) +
  scale_color_gradient(low="red", high="green") +
  scale_size_continuous(range=c(1,12))

enter image description here

Пока это немного грязно, вы можете на самом деле разумно прочитать все 5 измерений для большинства точек.

Улучшен подход к многомерному построению, если некоторые из ваших переменных категоричны. Если все ваши переменные непрерывны, вы можете превратить некоторые из них в категориальные с помощью cut, а затем использовать facet_wrap или facet_grid для их создания.

Например, здесь я разбиваю var3 и var4 на квинтили и использую facet_grid для них. Обратите внимание, что я также сохраняю эстетику цвета, а также подчеркиваю, что большую часть времени, превращая непрерывную переменную в категоричную на высокоразмерных сюжетах, достаточно хорош, чтобы получить ключевые точки (здесь вы заметите, что цвета заливки и границы хороши равномерно внутри любой ячейки сетки):

df$var4.cat <- cut(df$var4, quantile(df$var4, (0:5)/5), include.lowest=T)
df$var3.cat <- cut(df$var3, quantile(df$var3, (0:5)/5), include.lowest=T)

ggplot(df, aes(x=var1, y=var2, fill=var3, color=var4, size=var5^2)) +
  geom_point(shape=21) +
  scale_color_gradient(low="red", high="green") +
  scale_size_continuous(range=c(1,12)) +
  facet_grid(var3.cat ~ var4.cat)

enter image description here