1

我有一个所有氨基酸的 x,y,z 坐标矩阵。我使用以下函数在 3D 空间中绘制蛋白质:

make.Plot <- function(position.matrix, center, radius){
  scatterplot3d(x = position.matrix[,4], y = position.matrix[,5], z = position.matrix[,6], type = 'o', color = 'blue')
}

position.matrix 中的每一行代表不同的氨基酸。我想做的是修改函数,所以如果我传递一个“中心”,它对应于位置矩阵第 2 列中的数字(列出氨基酸编号)以及半径,我想要一个球体以该氨基酸为中心。

例如,如果我通过它 (position.matrix, 9, 3),我希望它在氨基酸 9 周围绘制一个半径为 3 的球体。我在此处上传了位置数据的副本: http://temp-share .com/show/YgFHv2J7y

请注意,行计数并不总是规范计数,因为跳过了一些残基。我将始终将其传递给“规范”计数...

谢谢你的帮助!

4

1 回答 1

8

这是您的代码的经过测试的修改。它为 cex.symbols 添加一个长度为 2 的大小向量,通过将 1 添加到逻辑向量来选择该向量:

make.Plot <- function(position.matrix, center, radius){
    scatterplot3d(x = position.matrix[,4], y = position.matrix[,5], 
                  z = position.matrix[,6], type = 'o', 
          cex.symbols=c(1,radius)[1+(position.matrix[,2]==center)],  color = 'blue')
          }

在此处输入图像描述

我想知道你真正想要的是 rgl 包。它具有形状和交互式绘图环境。使用 scatterplot3d,您可以使用以下代码将选择的点设为红色:

myplot <- make.Plot(position.matrix, 3, 9)
myplot$points3d(position.matrix[3 , 4:6],  col="red", cex=10)

我还找到了一些代码来绘制一个“参数球体”,它可以适应创建一个突出显示的指标:

myplot <- make.Plot(position.matrix, 3, 9)
a=seq(-pi,pi, length=10);
myplot$points3d(x=2*c(rep(1, 10) %*% t(cos(a)))+position.matrix[3 , 4] , 
 y=2*c(cos(a) %*% t(sin(a)))+position.matrix[3 , 5],
 z=2*c(sin(a) %*% t(sin(a)))+position.matrix[3 , 6],
 col="red", cex=.2)

在此处输入图像描述

于 2013-04-16T00:50:18.210 回答