【问题标题】:rdkit: How to show molecular's atoms numberrdkit:如何显示分子的原子数
【发布时间】:2021-03-24 12:21:14
【问题描述】:

你好1 我试图使用rdkit包完成在Jupyter Notebook“import IPython.core.interactiveshell”和“import InteractiveShell”以及“from rdkit.Chem.Draw import DrawingOptions”包中显示分子原子序数的工作,然后我正在使用“DrawingOptions.includeAtomNumbers=True”来工作,但结果根本没有显示原子索引。 我不知道是什么原因导致原子数没有显示出来。 所以我想请你给出一个合适的答案。 非常感谢!

【问题讨论】:

    标签: numbers display rdkit moleculer


    【解决方案1】:

    分子中的原子序数有三种显示方式。

    from rdkit import Chem
    from rdkit.Chem.Draw import IPythonConsole
    
    def show_atom_number(mol, label):
        for atom in mol.GetAtoms():
            atom.SetProp(label, str(atom.GetIdx()+1))
        return mol
    

    1.代替原子

    mol = Chem.MolFromSmiles('c1ccccc(C(N)=O)1')
    show_atom_number(mol, 'atomLabel')
    

    2。和原子一起

    mol = Chem.MolFromSmiles('c1ccccc(C(N)=O)1')
    show_atom_number(mol, 'molAtomMapNumber')
    

    3。在原子之上

    mol = Chem.MolFromSmiles('c1ccccc(C(N)=O)1')
    show_atom_number(mol, 'atomNote')
    

    如果您想更改要显示的数字,请根据您的要求更改str(atom.GetIdx()+1) 部分。查看我的博客文章以获得更详细的解释here

    【讨论】:

      【解决方案2】:

      这在 Jupyter Notebook 中适用于我:

      from rdkit import Chem
      from rdkit.Chem.Draw import IPythonConsole
      from rdkit.Chem import Draw
      
      smiles = 'O=C(C)Oc1ccccc1C(=O)O'
      mol = Chem.MolFromSmiles(smiles)
      Draw.MolToImage(mol, includeAtomNumbers=True)
      

      更新

      2020.03.1 版本开始,这不再起作用了。

      但是你可以直接注释原子。

      from rdkit import Chem
      
      smiles = 'O=C(C)Oc1ccccc1C(=O)O'
      mol = Chem.MolFromSmiles(smiles)
      for atom in mol.GetAtoms():
          atom.SetProp('atomLabel',str(atom.GetIdx()))
      

      【讨论】:

      • 有人知道这个绘图功能是什么时候包含在 rdkit 中的吗?
      • @KareemJeiroudi 我不知道从什么时候开始包含这个功能,但似乎在实际版本中2020.03.1 它被破坏了。
      • @repelpy 我的一位同事在 2020 版本中遇到了同样的问题
      • @KareemJeiroudi 更新了答案
      【解决方案3】:

      2020.03.2.0版本你可以试试

      from rdkit.Chem.Draw import rdMolDraw2D
      from rdkit import Chem
      
      mol = Chem.MolFromSmiles('c1ccccc1O')
      d = rdMolDraw2D.MolDraw2DCairo(250, 200)
      d.drawOptions().addAtomIndices = True
      d.DrawMolecule(mol)
      d.FinishDrawing()
      with open('atom_annotation_1.png', 'wb') as f:   
          f.write(d.GetDrawingText())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多