如何在mathematica中将分子几何包含到3D图中?

时间:2016-02-25 16:43:36

标签: plot geometry wolfram-mathematica combinations

我在 Mathematica 中制作ListPlot3D,其中能量(z)取决于分子参数(x,y)。首先我导入数据(x,y,z形式的2个能量表面):

data = Import["D:\2dscan\mrci\GS-data.txt", "Table"];
data2 = Import["D:\2dscan\mrci\1ex-data.txt", "Table"];

然后可视化图形:

Show[
ListPlot3D[{data}, PlotRange -> {9, 14}, Mesh -> None, 
ColorFunction ->ColorData["Rainbow"], 
AlignmentPoint -> Center, ViewPoint -> {2, -2, 2},
ViewVertical -> {0, 0, 1}, BoxRatios -> {3, 3, 1}, FaceGrids -> {{-1, 0, 0}, {0, 1, 0}},  
PlotLegends -> Placed[BarLegend[{"Rainbow", {9, 14}},
LabelStyle -> {Black, FontSize -> 16,FontFamily -> "Helvetica"}],After],
AxesEdge -> {{-1, -1}, {+1, -1}, {+1, +1}}, LabelStyle -> Directive[Black],
AxesLabel -> {"N-N/A", "Hydrogen bond lenght/A", "Energy/eV"},
AxesStyle ->Directive[Black, FontSize -> 16, FontFamily -> "Times"]],

ListPlot3D[{data2}, PlotStyle -> Opacity[0.4], PlotRange -> {9, 14}, 
Mesh -> None, ColorFunction -> ColorData["DarkRainbow"]],

Graphics3D[{Red, AbsolutePointSize[10],Point[{3.23, 2.28, 10.12}]}].
Graphics3D[{Red, AbsolutePointSize[10],Point[{3.23, 1.7, 11.05}]}],
Graphics3D[{Red, AbsolutePointSize[10],Point[{3.23, 1.05, 9.6}]}],

AspectRatio -> 1/GoldenRatio, Boxed -> False, ImageSize -> 900]

给了我这个:

3D PLot

enter image description here

一切正常。但我想包括分子的图片而不是红点,所以它看起来像这样:

Plot with moleules

enter image description here

我知道可以从.xyz或.pdb或.mol加载分子几何。文件

Import["D:\2dscan\mrci\1.mol", "Rendering" -> "BallAndStick"]

但如何将这些对象包含在情节中?

我知道我可以在一些具有透明背景的png图片的图形编辑器中执行此操作,但我仍然更喜欢 Mathematica 解决方案。 问题是,由于我很少有经验的用户,几乎没有初学者,我不知道如何将分子几何转换为可以与图结合的3D对象。任何建议表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

奇怪的是,你不能在另一个中Inset一个graphics3d。 以下是使用图形转换在ListPlot中定位 Graphics3D 对象的示例:

g = Graphics3D[{{Red, Sphere[{0, 0, 0}, 1]},
    {Blue, Sphere[{3, 0, 0}, 1.5]},
    {Black, Cylinder[{{0, 0, 0}, {3, 0, 0}}, 1/4]}}];
Show[{
  ListPlot3D[
   Flatten[Table[ {x, y, Sin[x] Cos[y]} , {x, -2, 2, .1}, {y, -2, 
      2, .1}], 1]],
  Graphics3D[
     (Translate[#, {-1, -1, -.75}] &)@*
     (Rotate[#, Pi/4, {0, 1, 0}, {0, 0, 0}] &)@*
     (Scale[#, .1, {0, 0, 0}] & )@*
     (Translate[#, {-3/2, 0, 0}] &) @First@g]}, PlotRange -> All]

enter image description here

请注意@*符号相当新,因为较旧的mathematica版本使用Composition

参考: https://mathematica.stackexchange.com/q/102247/2079