rdMolDraw2Dモジュールを使って構造式描画をカスタマイズ
ブログ本編(実践ケモインフォマティクス)もよろしくお願いします。
類似度マップ(SmililarityMaps)を用いずに、描画方法をカスタマイズ(構造式にハイライトをつけたり、原子をインデックス表示にしたり etc...)についてまとめた。
(本記事は「化学の新しいカタチ」の内容を簡潔にまとめたものです。より詳しい内容は、そちらに載っています)
描画の流れ
描画を色々カスタマイズする場合には、rdMolDraw2Dモジュールを使用する。
このモジュールを使用する場合には、以下の手順をふむ必要がある。
参考HPより
- コンテナとなるオブジェクトの作成
- コンテナの細かい描画設定
- コンテナに描画したい分子を追加
- コンテナファイナライズして書き込んだデータを取り出す
- データを描画,またはファイルとして保存
コード
モジュールのインストール
conda install -c conda-forge rdkit
分子の準備
from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, Draw
from rdkit.Chem.Draw import rdMolDraw2D
from IPython.display import SVG
from matplotlib.colors import ColorConverter
mol = Chem.MolFromSmiles('Cn1c(=O)c2c(ncn2C)n(C)c1=O')
smiles = Chem.MolToSmiles(mol)
# とりあえずDraw.MolToImage(mol)で描画
img = Draw.MolToImage(mol)
img.save('caffeine_molecule.png',bbox_inches='tight')
img
基本操作
# 1. コンテナを準備(コンテナサイズは300x300とする)
view = rdMolDraw2D.MolDraw2DSVG(300, 300)
# 2.描画設定
option = view.drawOptions()
option.circleAtoms=False
option.continuousHighlight=False
# 3.コンテナに分子を追加
#単一分子の追加
tm = rdMolDraw2D.PrepareMolForDrawing(mol)
#tm = rdMolDraw2D.DrawMolecules(mols)
#複数分子の追加
#tm = rdMolDraw2D.DrawMolecules(mols)
view.DrawMolecule(tm)
# 4.コンテナファイナライズして書き込んだデータを取り出す
view.FinishDrawing()
# 5.6コンテナの描画と保存
svg = view.GetDrawingText()
#保存
with open('caffein_test.svg', 'w') as f:
f.write(svg)
#描画
SVG(svg)
何も設定を変えていないのでDraw.MolToImage(mol)使用時と同じ絵になる。
それぞれのメソッドのオプションなど
(新しい化学のカタチより転記)
オプションMolDraw2DSVG.DrawMolecule(mol)などのDrawメソッド
オプション
説明
highlightAtoms
ハイライトする原子のリスト
highlightAtomColors
ハイライトする原子の色
highlightAtomRadii
ハイライトする原子の半径を設定
highlightBonds
ハイライトする結合のリスト
highlightBondColors
ハイライトする結合の色
legend(s)
凡例
MolDraw2DSVG.drawOptions()
オプション
説明
atomLabelDeuteriumTritium
重水素をD, トリチウムをTで表記
atomLabels
原子Idで指定した原子のラベルを設定
additionalAtomLabelPadding
元素記号と結合との間にどの程度マージンを取るか
circleAtoms
ハイライトするアトムを円で表示するかどうか
デフォルト:True
continuousHighlight
ハイライト領域を塗りつぶすかどうか
デフォルト:True
fillHighlights
ハイライトするアトムの円を塗りつぶすかどうか
デフォルト:True
padding
描画領域のうちのマージンの割合(0〜1)
legendFontSize
凡例のフォントサイズ(px単位)
multipleBondOffset
多重結合の2つ目以降の線をどの程度離して描画するか
(オングストローム単位)
addAtomIndices
原子Idを構造式中に表示
デフォルト:False
addBondIndices
結合Idを構造式中に表示
デフォルト:False
annotationFontScale
原子や結合に付記する注釈のフォントサイズ(割合指定)
デフォルト:0.75
addStereoAnnotation
絶対配置R/Sや幾何異性E/Zの表示有無
デフォルト:False
メソッド
メソッド
説明
useBWAtomPalette
構造式を白黒で描画する
useDefaultAtomPalette
構造式描画に用いる色をデフォルトに戻す
updateAtomPalette
構造式描画に用いる色を,原子番号とRGBのタプルを組とする辞書形式で指定する
setBackgroundColour
キャンバス色の変更する
setHighlightColour
ハイライト領域のデフォルト色を変更する
描画をカスタマイズする
原子のラベルとハイライトする色を変更してみる。その他にも細々設定する(コード内に説明付記)
(ハイライトする色はmatplotlibをつかって生成したRGBカラーコードを使う)
#RGBカラーコードを生成
color1 = ColorConverter().to_rgb('cyan')
color2 = ColorConverter().to_rgb('skyblue')
color3 = ColorConverter().to_rgb('yellow')
print('cyan:',color1)
print('skyblue:',color2)
print('yellow:',color3)
"""output
cyan: (0.0, 1.0, 1.0)
skyblue: (0.5294117647058824, 0.807843137254902, 0.9215686274509803)
yellow: (1.0, 0.0, 0.0)
"""
# ハイライトする原子と色,円の半径を設定
atoms = [6,8]
atom_colors = {6: color1, 8: color2}
radii = {6: 0.5, 8: 0.5}
# ハイライトする結合と色を指定
bonds = [1,2,3,4,5]
bonds_colors = {1:color1,2:color2,3:color3,4:color3,5:color3}
# コンテナの準備
view = rdMolDraw2D.MolDraw2DSVG(300,350)
tm = rdMolDraw2D.PrepareMolForDrawing(mol)
# 描画オプションの設定
#フォントサイズをやや小さくする
view.SetFontSize(0.9 * view.FontSize())
option = view.drawOptions()
#原子ラベルを設定する
option.atomLabels[6] = 'N1'
option.atomLabels[8] = 'N2'
#二重結合の幅
option.multipleBondOffset=0.07
#描画領域のマージン
option.padding=0.11
#レジェンドのフォントサイズ
option.legendFontSize=20
# コンテナに分子を登録
view.DrawMolecule(tm,
highlightAtoms=atoms,
highlightAtomColors=atom_colors,
highlightAtomRadii=radii,
highlightBonds=bonds,
highlightBondColors=bonds_colors,
legend='caffeine')
#ファイナライズ、保存、描画
view.FinishDrawing()
svg = view.GetDrawingText()
with open('caffein_test.svg', 'w') as f:
f.write(svg)
SVG(svg)
参考
Author And Source
この問題について(rdMolDraw2Dモジュールを使って構造式描画をカスタマイズ), 我々は、より多くの情報をここで見つけました https://qiita.com/ottantachinque/items/dbf4a0f9db3f129e3748著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .