簡體   English   中英

約20 x 20 x 20立方體的圖密度

[英]Plot density for ~20 x 20 x 20 cubes

我正在尋找一種繪制密度圖(使用Python或R)的好方法,該密度圖顯示模擬蛋白質定期探索的空間。 數據集由許多5x5x5多維數據集中的密度組成,如下所示:

x      y    z    density
-4    -3    51    0 
-4    -3    56    0.523343
     ...
121    92    81    1 
121    92    86    0.01 

(x,y,z)表示3D坐標,它是立方體左下角的點。 每個立方體的大小為5x5x5。 兩個立方體之間沒有重疊。 總共約有1萬個立方體。

density列是我要分配給每個立方體的顏色。 數字范圍是0到1。

我也願意接受其他繪圖方法。 任何意見,將不勝感激。

對於10k多維數據集,我猜想plotly的mesh3d或3d表面圖(如@Jon Spring所述)在計算上會非常密集。

我不確定這是否是您的選擇,但我會使用這樣的scatter3d圖:

在此處輸入圖片說明

library(plotly)

n <- 100

cubes <- data.frame(
  x = rnorm(n, 0, 200),
  y = rnorm(n, 0, 200),
  z = rnorm(n, 0, 200),
  density = runif(n, 0, 1)
)

p <- plot_ly(cubes, x = ~x, y = ~y, z = ~z, color = ~density, type = "scatter3d", mode = "markers", colors = colorRamp(c("blue", "lightblue", "chartreuse3", "yellow", "red")), marker = list(symbol = 'square', size = 4))
p

# optional: save plot as a HTML file
library(htmlwidgets)
saveWidget(p, file="myScatter3dPlot.html", selfcontained = TRUE)

n增加到10k可以平穩運行。 這里的缺點是,顯示的符號是扁平正方形,給定的數據點(x,y,z)是其中心(您可以計算與左下角的偏移量)。 另外,正方形大小和顏色可能需要根據您的用例進行調整。

在此處此處查看更多信息。

misc3d軟件包(基於OpenGL的rgl接口構建)中的功能rgl似乎很不錯。

組成數據

在沒有數據可玩的情況下,我使用了多元正態密度

dd <- expand.grid (x=1:21,y=1:21,z=1:21)
dd[,1:3] <- scale(dd[,1:3])
library(mvtnorm)
S <- matrix(c(0.5,0.1,-0.1,0.1,2,0.7,-0.1,0.7,1),3,3)
dd$dens <- dmvnorm(dd[,1:3],mean=c(0,0,0),sigma=S)

重塑數據

misc3d::image3d()需要3D數組才能使用; 使用reshape2::acast()來完成這項工作

library(reshape2)
v <- acast(dd,x~y~z, value.var="dens")

制作圖片

library(viridisLite)  ## optional: prettier colour palette
library(misc3d)
## function to extract dim names for x, y, z axes
d <- function(i) as.numeric(dimnames(v)[[i]])
image3d(v,x=d(1),y=d(2),z=d(3),
        sprites=TRUE,  ## (default)
        col=viridis(256))
contour3d(v,x=d(1),y=d(2),z=d(3),level=c(0.01,0.03),
          alpha=0.2,add=TRUE)
box3d()
rgl.snapshot("dens3d.png")

我在拍攝快照時遇到了一些麻煩(可能是關於我的系統的問題),因此決定使用屏幕快照。 在舊版MacBook Pro上,以10,000點進行渲染有點慢,但還算不錯。 您可以嘗試使用顏色, sprites=TRUE vs FALSE ,輪廓...

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM