rdMolDraw2Dを用いて単色の分子を描画する

本記事では、RDKitを使って原子が色分けされていない単色の分子を描画する方法について記載します。 いろいろな記事で分子の描画方法については記載があったのですが、原子の色を調整する方法は載っていなかった&やり方にたどり着くまで試行錯誤が必要だったのでまとめることにしました。 処理としては1行で済むので簡単です。

rdMolDraw2Dを使った基本的な分子の描画方法については、こちらのブログに丁寧にまとめられていますのでそちらを参照ください。

環境・ライブラリ

  • python: 3.6
  • rdkit: 2019.09.2
  • ipython: 7.1.1

スクリプト

以下のスクリプトを実行すると黒色単色で分子を描画することができます。

draw_molecule.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from IPython.display import SVG
from rdkit import Chem
from rdkit.Chem import rdDepictor
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit.Chem.Draw.MolDrawing import DrawingOptions

mol = Chem.MolFromSmiles("CC1(C(N2C(S1)C(C2=O)NC(=O)CC3=CC=CC=C3)C(=O)O)C") # Penicillin
rdDepictor.Compute2DCoords(mol) # for generating conformer ID
# create a drawer container
drawer = rdMolDraw2D.MolDraw2DSVG(300, 300)
# define drawer options
drawer.drawOptions().updateAtomPalette({k: (0, 0, 0) for k in DrawingOptions.elemDict.keys()})
drawer.SetLineWidth(2)
drawer.SetFontSize(1.0)
#
drawer.DrawMolecule(mol)
drawer.FinishDrawing()
# generate and write the svg strings
svg = drawer.GetDrawingText().replace('svg:', '')
SVG(svg)
with open("mol.svg", "w") as f:
f.write(svg)

このスクリプトの出力ファイルの中身は以下の通りです。

解説

分子の色を調整しているのは12行目の drawer.drawOptions().updateAtomPalette({k: (0, 0, 0) for k in DrawingOptions.elemDict.keys()}) になります。

  1. DrawingOptions.elemDict.keys() で分子中の各原子のkeyを取得
  2. 取得したkeyに (0, 0, 0) を割り当てる。(これはRGB表記の黒を意味しています)
  3. 作成したdictを drawer.drawOptions().updateAtomPalette() を使ってatom paletteの更新

以上の処理で分子の色を調整しています。RGB表記の値を変えれば望みの色に分子を統一することが可能です。

12行目をコメントアウトすると、以下の通りヘテロ原子に色がついた分子の描画ができます。

他にも色々とdrawerのオプションは調整できますが、それはRDkitのAPIドキュメントを参照してください。

以上で終わります。

参照

RDKitでの構造式描画を詳しく解説
rdkit.Chem.Draw.rdMolDraw2D module