用plotly绘制R中的分子

用plotly绘制R中的分子,r,ggplot2,plotly,R,Ggplot2,Plotly,我有两个数据框,如下所示,它们代表一个分子。我想用plot\u ly生成这个分子的一个图 一个数据帧,df,包含坐标和元素类型。 另一个数据帧,conn,包含原子之间的连接结构,以及连接两个原子的键数(1、2或3)。 例如,从conn的第二行,原子55通过双键连接到原子54 head(df) atomId element xCord yCord zCord 1 54 C -16.47474 -14.96508 8.332247 2 55

我有两个数据框,如下所示,它们代表一个分子。我想用
plot\u ly
生成这个分子的一个图

一个数据帧,
df
,包含坐标和元素类型。 另一个数据帧,
conn
,包含原子之间的连接结构,以及连接两个原子的键数(1、2或3)。 例如,从conn的第二行,原子55通过双键连接到原子54

head(df)
  atomId element     xCord     yCord     zCord
1     54       C -16.47474 -14.96508  8.332247
2     55       C -15.43503 -14.37500  7.599300
3     56       C -15.03843 -13.23943  8.285489
4     57       C -15.82452 -13.17686  9.413819
5     58       N -16.68804 -14.21907  9.439404
6     59       H -17.41647 -14.37430 10.166242

head(conn)
    atom1 atom2 order
135    58    54     1
136    55    54     2
137    71    55     1
138    70    56     1
139    55    56     1
140    58    57     1

df <- structure(list(atomId = c("54", "55", "56", "57", "58", "59", 
"69", "70", "71"), element = c("C", "C", "C", "C", "N", "H", 
"H", "H", "H"), xCord = c(-16.474736, -15.43503, -15.038428, 
-15.82452, -16.68804, -17.416475, -15.788173, -14.29002, -15.038094
), yCord = c(-14.965081, -14.375, -13.239429, -13.176858, -14.219065, 
-14.374302, -12.380838, -12.509718, -14.671816), zCord = c(8.332247, 
7.5993, 8.285489, 9.413819, 9.439404, 10.166242, 10.151304, 7.979794, 
6.636516)), class = "data.frame", row.names = c(NA, -9L))

conn <- structure(list(atom1 = c(58, 55, 71, 70, 55, 58, 56, 69, 59), 
    atom2 = c(54, 54, 55, 56, 56, 57, 57, 57, 58), order = c(1, 
    2, 1, 1, 1, 1, 2, 1, 1)), row.names = 135:143, class = "data.frame")

我真的很喜欢这个情节,因为它是互动的,我可以注释点。然而,我想在连接之间画一条线。我想显示键合线,比如在这张图中,然而,我实际上更喜欢plotly中的点,而不是第二张图中的巨大丑陋的3D球体

有人能帮我用Plotly或其他类似的软件包来表示债券行吗?最糟糕的情况是,我知道它们是否必须进行颜色编码,或使用虚线/实线等进行编码。我更愿意看到双轨制,但我会尽我所能

谢谢

plot_ly(x = df$xCord, y = df$yCord, z = df$zCord, type="scatter3d", 
        mode="markers", color = df$element, hoverinfo = "text",
        text = paste('AtomId: ', df$atomId, "\nElement: ", df$element)