2

I am using jupyter lab to draw chemical structures. But the output image resolution is too low. How can I improve it?

from rdkit import Chem
from rdkit.Chem import Draw
smiles = 'C1=CC(=C(C=C1C2=C(C(=O)C3=C(C=C(C=C3O2)O)O)O)O)O'
m = Chem.MolFromSmiles(smiles)
Draw.MolToImage(m)

Thanks a lot

Wang
  • 940
  • 8
  • 17

1 Answers1

2

I have found a solution, more information can be found here

from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import rdDepictor
from rdkit.Chem.Draw import rdMolDraw2D
from IPython.display import SVG

smiles = 'C1=CC(=C(C=C1C2=C(C(=O)C3=C(C=C(C=C3O2)O)O)O)O)O' 
m = Chem.MolFromSmiles(smiles)

def moltosvg(mol, molSize = (300,300), kekulize = True):
    mc = Chem.Mol(mol.ToBinary())
    if kekulize:
        try:
            Chem.Kekulize(mc)
        except:
            mc = Chem.Mol(mol.ToBinary())
    if not mc.GetNumConformers():
        rdDepictor.Compute2DCoords(mc)
    drawer = rdMolDraw2D.MolDraw2DSVG(molSize[0],molSize[1])
    drawer.DrawMolecule(mc)
    drawer.FinishDrawing()
    svg = drawer.GetDrawingText()
    return svg.replace('svg:','')

SVG(moltosvg(m))
Wang
  • 940
  • 8
  • 17
  • Yes, the RDKit has SVG rendering code which is higher quality. Also the CoordGen library can be activated in RDKit: this supports more sensible poses for drawings of molecules. And also there are some newer drawing functions in the most recent release: http://rdkit.blogspot.com/2020/04/new-drawing-options-in-202003-release.html – JoshuaBox May 12 '20 at 17:00