我在 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]
给了我这个:
一切正常。但我想包括分子的图片而不是红点,所以它看起来像这样:
我知道可以从.xyz或.pdb或.mol加载分子几何。文件
Import["D:\2dscan\mrci\1.mol", "Rendering" -> "BallAndStick"]
但如何将这些对象包含在情节中?
我知道我可以在一些具有透明背景的png图片的图形编辑器中执行此操作,但我仍然更喜欢 Mathematica 解决方案。 问题是,由于我很少有经验的用户,几乎没有初学者,我不知道如何将分子几何转换为可以与图结合的3D对象。任何建议表示赞赏。感谢。
答案 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]
请注意@*
符号相当新,因为较旧的mathematica版本使用Composition