LoginSignup
2
0

More than 1 year has passed since last update.

【RDKit】Draw.MolsToGridImageで作成したイメージの保存

Last updated at Posted at 2022-03-02

はじめに

最近、RDKitを使用し始めました。
その中でDraw.MolsToGridImageで作成したイメージの保存したいと思うことがありました。
イメージの保存は以下のようにできるとありました。

img.save('sample.svg')

しかし、私の場合は以下のようなエラーが出てうまく保存できませんでした。

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-35-a3256ff69e93> in <module>
----> 1 img.save('sample.svg')

AttributeError: 'SVG' object has no attribute 'save'

イメージの保存の仕方がわかったので共有します。

本文

環境

Dockerで作成したJupyterLab上で実行しています。

  • macOS Monterey 12.2.1
  • Docker version 20.10.12
  • Python 3.9.5
  • rdkit-pypi 2021.9.4

RDKitのimport

from rdkit import Chem
from rdkit.Chem import Draw

サンプルデータの作成

smiles_dict = {
    'benezene': 'c1ccccc1',
    'pentacene': 'c1ccc2cc3cc4cc5ccccc5cc4cc3cc2c1',
    'BTBT': 'S1c2ccccc2C2=C1c1ccccc1S2',
    'TMTES-pentacene': 'CC[Si](CC)(CC)C#Cc1c2cc3c(C)ccc(C)c3cc2c(C#C[Si](CC)(CC)CC)c2cc3c(C)ccc(C)c3cc12',
}

smilesをrdkit.Chem.rdchem.Molオブジェクトに変換

moles_dict = {}
for name, smiles in smiles_dict.items():
    moles_dict[name] = Chem.MolFromSmiles(smiles)

Imageの保存

今回の問題の解決方法はwith open()を使うということです。
SVGとして保存する場合は、データはstrである必要があります。
また、PNGとして保存する場合は、bytesである必要があるようです。
どちらの場合もimg.dataでその形式のデータを取得できます。

type(img.data)

# SVGの場合の出力
str
# PNGの場合の出力
bytes

SVGとして保存

SVGとして保存する場合はDraw.MolsToGridImage()の引数にuseSVG=Trueを指定してください。

img = Draw.MolsToGridImage(moles_dict.values(), molsPerRow=2, subImgSize=(400, 400), legends=moles_dict.keys(), useSVG=True)

with open('sample.svg', mode='w') as f:
    f.write(img.data)

PNGとして保存

img = Draw.MolsToGridImage(moles_dict.values(), molsPerRow=2, subImgSize=(400, 400), legends=moles_dict.keys())

with open('sample.png', mode='wb') as f:
    f.write(img.data)

実行結果(sample.png)

test.png

おわりに

今回はDraw.MolsToGridImage()で作成したイメージを保存する方法を紹介しました。
間違い等がありましたら、ご連絡いただけますと幸いです。

参考

RDKit
RDKit日本語ドキュメント
"How to save "IPython.core.display.SVG" as PNG file?" -- Stack Overflow

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0