RDKit Cookbook:分子可视化与绘图技巧实战指南

RDKit Cookbook:分子可视化与绘图技巧实战指南

rdkit The official sources for the RDKit library rdkit 项目地址: https://gitcode.com/gh_mirrors/rd/rdkit

什么是RDKit Cookbook?

RDKit Cookbook是一本实用指南,汇集了使用RDKit进行化学信息学处理的各类实用技巧和代码示例。这些示例由RDKit社区贡献,经过最新版本测试验证,涵盖了从基础到进阶的各种分子操作场景。特别适合需要快速解决特定问题的研究人员和开发者参考使用。

分子可视化基础技巧

显示原子索引编号

在药物设计和分子分析中,快速识别特定原子位置至关重要。RDKit提供了多种方式显示原子编号:

from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole

# 方法1:自定义函数添加原子映射编号
def mol_with_atom_index(mol):
    for atom in mol.GetAtoms():
        atom.SetAtomMapNum(atom.GetIdx())
    return mol

# 方法2:直接设置绘图选项
IPythonConsole.drawOptions.addAtomIndices = True
IPythonConsole.molSize = 300,300

两种方法各有特点:第一种将编号直接显示在原子位置上,第二种则将编号显示在原子旁边,更适合复杂分子。

显示键索引编号

类似原子编号,键编号对于反应机理研究很有帮助:

IPythonConsole.drawOptions.addBondIndices = True

显示计算属性值

将计算结果如Gasteiger电荷直接标注在分子图上:

from rdkit.Chem import AllChem

m = Chem.MolFromSmiles('c1ncncc1C(=O)[O-]')
AllChem.ComputeGasteigerCharges(m)

# 将电荷值标注在原子旁
for at in m.GetAtoms():
    lbl = '%.2f'%(at.GetDoubleProp("_GasteigerCharge"))
    at.SetProp('atomNote',lbl)

高级可视化技巧

立体化学标注

RDKit支持显示分子的立体化学信息,包括新的CIP标记系统:

from rdkit.Chem import rdCIPLabeler

m = Chem.MolFromSmiles('F[C@H]1CC[C@H](O)CC1')
rdCIPLabeler.AssignCIPLabels(m)  # 使用新CIP标记系统

黑白模式绘图

发表论文时经常需要黑白图形:

IPythonConsole.drawOptions.useBWAtomPalette()  # 切换到黑白调色板

或者使用rdMolDraw2D实现更精细的控制:

from rdkit.Chem.Draw import rdMolDraw2D

drawer = rdMolDraw2D.MolDraw2DCairo(500,300)
drawer.drawOptions().useBWAtomPalette()
drawer.DrawMolecule(mol)

分子高亮技巧

子结构高亮

突出显示分子中的特定功能团:

substructure = Chem.MolFromSmarts('C(=O)O')  # 羧酸基团
m.__sssAtoms = [atom.GetIdx() for atom in m.GetSubstructAtoms(substructure)]

差异高亮

比较两个分子的差异时,可以高亮显示非公共部分:

def view_difference(mol1, mol2):
    mcs = rdFMCS.FindMCS([mol1,mol2])  # 找最大公共子结构
    mcs_mol = Chem.MolFromSmarts(mcs.smartsString)
    
    # 获取非公共原子索引
    target_atm1 = [a.GetIdx() for a in mol1.GetAtoms() 
                  if a.GetIdx() not in mol1.GetSubstructMatch(mcs_mol)]
    
    return Draw.MolsToGridImage([mol1, mol2], 
                              highlightAtomLists=[target_atm1, target_atm2])

多色高亮

根据原子/键属性使用不同颜色高亮:

from collections import defaultdict

# 设置不同颜色
colors = [(0.0, 0.0, 1.0, 0.1), (1.0, 0.0, 0.0, 0.2)]  # 蓝/红

# 根据芳香性分配颜色
athighlights = defaultdict(list)
for a in mol.GetAtoms():
    color = colors[0] if a.GetIsAromatic() else colors[1]
    athighlights[a.GetIdx()].append(color)

特殊绘图需求

去除隐式氢

某些情况下需要明确显示所有氢原子:

for atom in m.GetAtoms():
    atom.SetProp("atomLabel", atom.GetSymbol())  # 强制显示所有原子符号

使用缩写

简化常见功能团的显示:

from rdkit.Chem import rdAbbreviations

abbrevs = rdAbbreviations.GetDefaultAbbreviations()
nm = rdAbbreviations.CondenseMolAbbreviations(m, abbrevs)

RDKit内置了多种常见基团缩写,如Et(乙基)、Ph(苯基)等。

复杂分子布局

对于大环等复杂分子,使用CoordGen可获得更好的布局:

from rdkit.Chem import rdCoordGen

rdCoordGen.AddCoords(mol)  # 使用CoordGen算法生成坐标

CoordGen特别适合处理以下情况:

  • 大环化合物
  • 金属配合物
  • 复杂天然产物

总结

RDKit提供了丰富灵活的分子可视化功能,从基础原子编号到高级差异分析,能够满足各种化学信息学研究的需求。掌握这些技巧可以显著提高研究效率,使分子分析更加直观有效。

rdkit The official sources for the RDKit library rdkit 项目地址: https://gitcode.com/gh_mirrors/rd/rdkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侯宜伶Ernestine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值