python 如何从SMILES分子表示生成图形?

svmlkihl  于 2022-12-17  发布在  Python
关注(0)|答案(3)|浏览(107)

我有一个用SMILES字符串表示的分子数据集。我试图将其表示为图形。有什么方法可以做到这一点吗?例如,假设我有字符串CC(C)(C)c1ccc2occ(CC(=O)Nc3ccccc3F)c2c1,有没有一种通用的方法可以将其转换为图形表示,即邻接矩阵和原子向量?我看到针对SMILES from graphs的问题,我知道rdkitMolFromSmiles,但是我找不到从SMILES字符串中获取图形的方法。

pzfprimi

pzfprimi1#

您可以尝试pysmiles。从SMILES描述开始,您应该能够创建NetworkX图,并沿着代码生成所需的对象

from pysmiles import read_smiles
import networkx as nx
    
smiles = 'C12=C3C4=C5C6=C1C7=C8C9=C1C%10=C%11C(=C29)C3=C2C3=C4C4=C5C5=C9C6=C7C6=C7C8=C1C1=C8C%10=C%10C%11=C2C2=C3C3=C4C4=C5C5=C%11C%12=C(C6=C95)C7=C1C1=C%12C5=C%11C4=C3C3=C5C(=C81)C%10=C23'
mol = read_smiles(smiles)
    
# atom vector (C only)
print(mol.nodes(data='element'))
# adjacency matrix
print(nx.to_numpy_matrix(mol))

如果你能接受一般的可视化,你也可以尝试用

import matplotlib.pyplot as plt
elements = nx.get_node_attributes(mol, name = "element")
nx.draw(mol, with_labels=True, labels = elements, pos=nx.spring_layout(mol))
plt.gca().set_aspect('equal')

富勒烯是有趣的阴谋:)

xkftehaa

xkftehaa2#

为了完善Davide的答案https://stackoverflow.com/a/57063988/4240413,可以使用以下公式将键序包含到邻接矩阵中:

nx.to_numpy_matrix(mol, weight='order')

或根据networkx documentation使用

nx.adjacency_matrix(mol, weight='order').todense()
rkttyhzu

rkttyhzu3#

networkx是一个很好的解决方案。如果你正在寻找一些更自定义的东西,你可以自己创建图表。请参阅本文中的另一个方向的示例(图表中的SMILES):SMILES from graph

相关问题