You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RDKit生成带粗红高亮子结构的高分辨率SVG分子结构图

你现有代码的核心问题如下:

  1. 默认DrawMolecule的高亮逻辑是给原子加淡黄色背景填充,不是你需要的粗红线标注
  2. 没有同步高亮子结构对应的化学键,仅会高亮原子点位
  3. 没有自定义绘图样式配置,无法修改高亮的线条粗细、颜色属性

正确实现代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:15:06