在Python

时间:2016-08-17 23:36:54

标签: python pybel

目标:   我希望能够将Lewis /Kekulé结构的许多SVG图像组织成一些在一些常见查看文件中显示的反应列表,如PDF或PNG;也就是说,每个反应可能占用一行,反应物和产物被箭头或其他分隔物分开,并且在给定数据库中显示每个反应所需的PDF页面上将存在尽可能多的行。

上下文   我正在使用pybel.readstring()从本地机器上读取分子的规范SMILES表示,将该字符串转换为带有molSVG = mol._repr_svg_()的SVG字符串,然后在带有显示的jupyter笔记本上显示结果(SVG(molSVG)) )同时还将SVG字符串保存到列表和.svg文件中。例如:

import pybel as pb
from IPython.display import display, SVG

molecules = []

# Read in canonical SMILES to some tractable object.
mol = pb.readstring('smi', '[O-][C]([C]1[CH][CH][CH][O]1)[O]')

# Convert it to an SVG string
molSVG = mol._repr_svg_()

# Display the SVG.
display(SVG(molSVG))

# Save the SVG to an .svg file and a list
with open('out.svg', 'w+') as result:
    result.write(molSVG)
molecules.append(result)

我想要做的不是显示它们,而是将它们保存到一些单一的图像文件中。

尝试解决方案:   在过去的六七个星期里我经历了不少,所以我忘记了一些,但我尝试了pybel的Outfile类,但我不认为这会产生任何图像,因为它可能只用于存储OBAtom和OBMol类对象。来自matplotlib.backends.backend_pdf的Matplotlib的PdfPages似乎是将多个SVG放入单个文件的第一步,但我认为失败是因为它需要绘图作为输入,而不是SVG文件。我也看过像svgwrite之类的模块,但是还没能让它们起作用。

作为一个例子,成品的页面可能与this具有相似的结构,尽管没有像中间的线条和箭头上的标签那样的繁荣。

另外,请注意:我对所有形式的编码都非常缺乏经验,尤其是Python,所以请尽量保持简单。非常感谢任何建议!

0 个答案:

没有答案