代码:

import numpy as np
from rdkit import Chem
from rdkit.Chem import Draw, AllChem, PandasTools, DataStructs

mol = Chem.MolFromSmiles('O=C1N([C@@H](C)C2CC2)CC3=CC(C4=C(C)N=C(NC(C)=O)S4)=CC(S(=O)(C)=O)=C31')
bi = {}
fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=3, bitInfo=bi)

fp_arr = np.zeros(1,)
DataStructs.ConvertToNumpyArray(fp, fp_arr)
fp_arr = np.nonzero(fp_arr)[0]

for ar in fp_arr:
    img = Draw.DrawMorganBit(mol, ar, bi, useSVG=True)
    img.save("submol.png")

我想使用DrawMorganBit创建一个图像,以了解分子的 fingerprint 位是如何生成的.(使用PyCharm而不是Jupyter笔记本)

rdkit版本2022.3.4

Error

坍塌问题:

rdkit.Chem.rdchem.KekulizeException: Can't kekulize mol.  Unkekulized atoms: 5 6 8 9 14

保存问题:

AttributeError: 'str' object has no attribute 'save'

推荐答案

Kekuizing问题的解决方案可以在这里找到:

保存图像的问题是,您试图将SVG保存为png.

有了这段代码,你应该得到一个包含所有摩根比特的图像.

from rdkit import Chem
from rdkit.Chem import rdMolDescriptors, Draw
drawOptions = Draw.rdMolDraw2D.MolDrawOptions()
drawOptions.prepareMolsBeforeDrawing = False
from rdkit.Chem.Draw import IPythonConsole

mol = Chem.MolFromSmiles('O=C1N([C@@H](C)C2CC2)CC3=CC(C4=C(C)N=C(NC(C)=O)S4)=CC(S(=O)(C)=O)=C31')

bi = {}
fp = rdMolDescriptors.GetMorganFingerprintAsBitVect(mol, radius=2, bitInfo=bi)

tpls = [(mol, x, bi) for x in fp.GetOnBits()]

p = Draw.DrawMorganBits(tpls, molsPerRow=5, legends=[str(x) for x in fp.GetOnBits()], drawOptions=drawOptions)
p.save('submol.png')

Python相关问答推荐

Pandas 有条件轮班操作

CommandeError:模块numba没有属性generated_jit''''

使用特定值作为引用替换数据框行上的值

如何在PySide/Qt QColumbnView中删除列

matplotlib图中的复杂箭头形状

Python Pandas—时间序列—时间戳缺失时间精确在00:00

导入错误:无法导入名称';操作';

PYTHON、VLC、RTSP.屏幕截图不起作用

Pandas—堆栈多索引头,但不包括第一列

在用于Python的Bokeh包中设置按钮的样式

GPT python SDK引入了大量开销/错误超时

获取PANDA GROUP BY转换中的组的名称

如何在Airflow执行日期中保留日期并将时间转换为00:00

高效生成累积式三角矩阵

Scipy差分进化:如何传递矩阵作为参数进行优化?

按列表分组到新列中

如何通过特定导入在类中执行Python代码

删除另一个div中的特定div容器

为什么任何一个HTML页面在保存到文件后都会变大6个字节?

在Python Polar中从一个函数调用添加多个列