RDKit Cookbook:分子可视化与绘图技巧实战指南
rdkit The official sources for the RDKit library 项目地址: 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 项目地址: https://gitcode.com/gh_mirrors/rd/rdkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考