Сделать 3D-график из матрицы - PullRequest
0 голосов
/ 07 мая 2018

У меня есть 2D matrix:

cells                  Rpl37a    Itm2c   Atp1b1     Olfm1      Prnp   
1: AAACGGGCAATCTACG-1 1.7876878 2.393453 4.527764 2.0751658 2.3934526 
2: AAGTCTGCAGCGAACA-1 1.9235754 1.683439 4.034793 1.6834394 1.9235754 
3: ACAGCCGAGTACGTTC-1 1.7168081 2.422601 4.021788 2.0605259 2.0605259 
4: ACATCAGCAGGTTTCA-1 3.1849476 2.165849 4.139574 0.0000000 1.8161277 
5: ACCCACTAGTGTACCT-1 0.8960067 2.018112 4.774355 2.0181116 1.3608743 
6: ACCTTTAAGTGGTCCC-1 3.2418217 1.199632 3.185896 1.7294919 0.8718525 
7: ACGATACCAAGAAGAG-1 1.2513362 2.396079 3.977721 1.2513362 2.9158808 
8: ACGGGCTGTACAGTGG-1 3.5215001 1.710004 2.824437 2.0532873 2.5993292

Для каждого столбца мне нужно создать график плотности, который показывает распределение значений строк, а затем отобразить все графики плотности на одном графике 3D. Как я мог этого добиться? Я знаю, что есть библиотека plotly, но я совершенно новый и у меня проблемы с ней.

Обновление

Моя цель - каким-то образом увидеть все дистрибутивы одновременно. Я не знаю, как этого добиться. Просто наложенные 2D линейные графики не сработают, потому что приведенная выше матрица, которую я только что показал в качестве примера, на самом деле содержит гораздо больше строк и столбцов. Мне могут понадобиться не только графики плотности, но и просто линейный график для каждого столбца.

1 Ответ

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

Может быть и так, но я не уверен.

dat <- as.data.frame(matrix(rnorm(5000*10), ncol=10))
names(dat) <- LETTERS[1:10]

xvalues <- apply(dat, 2, function(y) density(y)$x)
xmin <- min(xvalues)
xmax <- max(xvalues)
yvalues <- c(apply(dat, 1, function(a) density(a, from=xmin, to=xmax)$y))
dd <- cbind(c(yvalues), xvalues=c(xvalues), a = colnames(dat))

library(plotly)
plot_ly(data.frame(dd), x = ~xvalues, y = ~a, z = ~yvalues, split = ~a, 
        type = "scatter3d", mode = "lines") 

enter image description here

EDIT

Лучше, но все же не убедительно.

dat <- as.data.frame(matrix(rnorm(150*10), ncol=10))
names(dat) <- LETTERS[1:10]

xvalues <- apply(dat, 2, function(y) density(y)$x)
xmin <- min(xvalues)
xmax <- max(xvalues)
yvalues <- c(apply(dat, 2, function(a) density(a, from=xmin, to=xmax)$y))

dd <- cbind(c(yvalues), xvalues=c(xvalues), a = colnames(dat))

library(plotly)

plot_ly(data.frame(dd), x = ~xvalues, y = ~a, z = ~yvalues, split = ~a, 
        type = "scatter3d", mode = "lines") 

enter image description here

...