目标: 我希望能够将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,所以请尽量保持简单。非常感谢任何建议!