Package: chemdraw
ChemDrawDraw molecules withPlotly.Make molecules look the way you want it!The package provides global control of aesthetics withconfig, and allows for local control by specifying details
for every atom, bond, and ring.(Development still in progress. So there are some bugs. But its working pretty well so far!)InstallationPip installable package available.pip install chemdrawpypi: chemdrawDependenciesnumpy(1.23.1)Used for mathplotly(5.9.0)Plots moleculeskaleido(0.1.0post1)Converts plotly graphs to images (png, svg, etc.)I am not using the most recent version of kaleido as it does not play nice with my computer. Try the newest
version, but if you are having issues install this specific version.rdkit(2022.3.4)Convert SMILES to position coordinates.Pillow(9.2.0)Used for image manipulation.scikit-learn(1.1.1)Used to reorient molecules.Examples:(Image may be distorted from viewer, but real image is not.)Basic Usageimportchemdrawmol="O=C(C)Oc1ccccc1C(=O)O"drawer=chemdraw.Drawer(mol,title=mol)fig=drawer.draw()fig.show()Gridimportchemdrawmolecules=["CCCCCCCCCC","CC(CC(CCC)C)CC","CCC1CC1","C([C@@H]1[C@H]([C@@H]([C@H]([C@H](O1)O)O)O)O)O","O=C(C)Oc1ccccc1C(=O)O","C1(CCC2)=C3C2=CC4=C5C3=C(CCC5CCC4)C=C1","CC(C)(C)N(C)C(=O)C14C3C2C1C5C2C3C45C(=O)C69C8C7C6C%10C7C8C9%10","CC3C(C(=O)OCC1=CCN2C1C(CC2)OC(=O)C(CC(=O)O3)(C(C)C)O)(C(C)C)O","N#CCC1(CC(O1)C2=CC(=NC2=O)OC)O"]drawer=chemdraw.GridDrawer(molecules)drawer.draw_png("example_2.png")Atom, Bond, and Ring NumbersAtom Numbers (black text)Bond Numbers (gray text)Ring Numbers (maroon text)importchemdrawmol="C1(CCC2)=C3C2=CC4=C5C3=C(CCC5CCC4)C=C1"config=chemdraw.Config()config.atom_numbers.show=Trueconfig.bond_numbers.show=Trueconfig.ring_numbers.show=Truedrawer=chemdraw.Drawer(mol,title=mol,config=config)fig=drawer.draw()fig.show()Ring Highlightsimportchemdrawmol="C1(CCC2)=C3C2=CC4=C5C3=C(CCC5CCC4)C=C1"molecule=chemdraw.Molecule(mol)forringinmolecule.rings:ring.highlight.show=True# all rings are highlighted (with default highlight_color)ifring.aromatic:# highlighted aromatic greenring.highlight.color="rgba(0,255,0,0.5)"drawer=chemdraw.Drawer(molecule,title=mol,config=config)fig=drawer.draw()fig.show()Atom and Bond Highlightsimportchemdrawmol="C1(CCC2)=C3C2=CC4=C5C3=C(CCC5CCC4)C=C1"molecule=chemdraw.Molecule(mol)# highlight outer ring bonds and atomsbond_ids=[0,1,2,19,5,6,21,15,14,13,12,11,10,16,17,18]forid_inbond_ids:molecule.bonds[id_].highlight.show=Trueforatominmolecule.atoms:atom.highlight.show=True# highlight inner bonds and atomsaccent_color="rgb(252,186,63)"molecule.bonds[8].highlight.show=Truemolecule.bonds[8].highlight.color=accent_colormolecule.bonds[20].highlight.show=Truemolecule.bonds[20].highlight.color=accent_coloratoms_ids=[4,8,9]forid_inatoms_ids:molecule.atoms[id_].highlight.color=accent_colordrawer=chemdraw.Drawer(molecule,title=mol,config=config)fig=drawer.draw()fig.show()PolymersFrom mole fileimportchemdrawmole_file_name="ketcher_mol_file.txt"mol=chemdraw.Molecule(mole_file=mole_file_name)drawer=chemdraw.Drawer(mol)fig=drawer.draw()fig.show()Add parenthesis to a SMILESimportchemdrawmol=chemdraw.Molecule("OC(=O)CCCCC(=O)NCCCCCCN")mol.add_parenthesis([0,15],sub_script="n")drawer=chemdraw.Drawer(mol)fig=drawer.draw()fig.show()Mole FilesYou can also pass a file path to mole files into 'Molecule'.
Support for V2000 only.importchemdrawmole_file_name="examples/mol_files/poly_diblock.txt"mol=chemdraw.Molecule(mole_file=mole_file_name)molecule_drawer=chemdraw.Drawer(mol)fig=molecule_drawer.draw()fig.show()More InfoFor more information on how the code works see:chemdraw.README.md