如何使用RDKit生成带粗红高亮子结构的高分辨率SVG分子结构图
你现有代码的核心问题如下:
- 默认
DrawMolecule的高亮逻辑是给原子加淡黄色背景填充,不是你需要的粗红线标注 - 没有同步高亮子结构对应的化学键,仅会高亮原子点位
- 没有自定义绘图样式配置,无法修改高亮的线条粗细、颜色属性
正确实现代码
from rdkit import Chem from rdkit.Chem import rdDepictor from rdkit.Chem.Draw import rdMolDraw2D from IPython.display import SVG # 构建分子和待匹配的子结构 m = Chem.MolFromSmiles('c1cc(C(=O)O)c(OC(=O)C)cc1') substructure = Chem.MolFromSmarts('C(=O)O') # 获取匹配的原子索引,生成对应子结构的化学键索引 matched_atoms = m.GetSubstructMatch(substructure) matched_bonds = [] for bond in substructure.GetBonds(): a1 = matched_atoms[bond.GetBeginAtomIdx()] a2 = matched_atoms[bond.GetEndAtomIdx()] matched_bonds.append(m.GetBondBetweenAtoms(a1, a2).GetIdx()) # 预计算2D坐标保证分子布局正确 rdDepictor.Compute2DCoords(m) # 初始化SVG绘制器,调整宽高可进一步提升分辨率 drawer = rdMolDraw2D.MolDraw2DSVG(600, 300) draw_options = drawer.drawOptions() # 自定义高亮样式:红色粗线、关闭背景填充 draw_options.highlightColour = (1, 0, 0) draw_options.highlightBondWidthMultiplier = 3 draw_options.fillHighlights = False draw_options.highlightAtomRadiusMultiplier = 0.3 # 绘制分子,同时高亮匹配的原子和化学键 drawer.DrawMolecule( m, highlightAtoms=matched_atoms, highlightBonds=matched_bonds ) drawer.FinishDrawing() # 输出SVG svg = drawer.GetDrawingText().replace('svg:', '') SVG(svg)
你可以根据需求调整MolDraw2DSVG的宽高参数提升分辨率,调整highlightBondWidthMultiplier数值修改高亮线条粗细。
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

