{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
""
],
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from rdkit import Chem\n",
"from rdkit.Chem import Draw\n",
"from rdkit.Chem.Draw import rdMolDraw2D\n",
"from IPython.display import SVG\n",
"\n",
"# Example molecule\n",
"mol = Chem.MolFromSmiles(\"C1=CC=C(C=C1)C=O\") \n",
"Chem.rdDepictor.Compute2DCoords(mol)\n",
"\n",
"# Define colors for atom types\n",
"atom_colors = {\n",
" 6: (0.6, 0.6, 0.6), # Carbon = light gray\n",
" 8: (0.98, 0.6, 0.6), # Oxygen = soft red/pink\n",
" 7: (0.55, 0.63, 0.8), # Nitrogen = light blue\n",
" 16: (0.8, 0.8, 0.55), # Sulfur = soft yellow\n",
" 17: (0.65, 0.85, 0.65), # Chlorine = light green\n",
" 1: (0.9, 0.9, 0.9), # Hydrogen = very light gray\n",
"}\n",
"\n",
"\n",
"# Default = muted purple (for other atoms)\n",
"default_color = (0.8, 0.7, 0.9)\n",
"\n",
"# Assign highlight colors\n",
"highlight_atoms = [atom.GetIdx() for atom in mol.GetAtoms()]\n",
"highlight_colors = {\n",
" atom.GetIdx(): atom_colors.get(atom.GetAtomicNum(), default_color)\n",
" for atom in mol.GetAtoms()\n",
"}\n",
"\n",
"# Draw with transparent background\n",
"drawer = rdMolDraw2D.MolDraw2DSVG(400, 400)\n",
"# drawer.drawOptions().clearBackground = False # 🔑 makes background transparent\n",
"rdMolDraw2D.PrepareAndDrawMolecule(\n",
" drawer,\n",
" mol,\n",
" highlightAtoms=highlight_atoms,\n",
" highlightAtomColors=highlight_colors\n",
")\n",
"drawer.FinishDrawing()\n",
"\n",
"# Clean up RDKit's extra XML headers\n",
"svg = drawer.GetDrawingText().replace(\"svg:\", \"\")\n",
"SVG(svg)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import networkx as nx\n",
"import matplotlib.pyplot as plt\n",
"from rdkit import Chem\n",
"\n",
"# Example molecule\n",
"mol = Chem.MolFromSmiles(\"C1CCN(C1)C(=O)N\") \n",
"Chem.rdDepictor.Compute2DCoords(mol)\n",
"\n",
"# Define colors for atom types\n",
"atom_colors = {\n",
" 6: \"lightgray\", # Carbon\n",
" 8: \"lightcoral\", # Oxygen\n",
" 7: \"lightblue\", # Nitrogen\n",
" 16: \"khaki\", # Sulfur\n",
" 17: \"lightgreen\", # Chlorine\n",
" 1: \"whitesmoke\", # Hydrogen\n",
"}\n",
"default_color = \"plum\"\n",
"\n",
"# Convert RDKit Mol → NetworkX graph\n",
"G = nx.Graph()\n",
"for atom in mol.GetAtoms():\n",
" idx = atom.GetIdx()\n",
" pos = mol.GetConformer().GetAtomPosition(idx)\n",
" G.add_node(\n",
" idx,\n",
" label=atom.GetSymbol(),\n",
" color=atom_colors.get(atom.GetAtomicNum(), default_color),\n",
" pos=(pos.x, pos.y) # store RDKit 2D coords\n",
" )\n",
"for bond in mol.GetBonds():\n",
" G.add_edge(bond.GetBeginAtomIdx(), bond.GetEndAtomIdx(), order=bond.GetBondTypeAsDouble())\n",
"\n",
"# Extract positions\n",
"pos = {n: (data[\"pos\"][0], data[\"pos\"][1]) for n, data in G.nodes(data=True)}\n",
"\n",
"# Draw nodes\n",
"node_colors = [G.nodes[n][\"color\"] for n in G.nodes]\n",
"nx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=800, edgecolors=\"k\")\n",
"\n",
"# Draw edges with bond order as width\n",
"# edge_widths = [1.5 * G[u][v][\"order\"] for u, v in G.edges()]\n",
"nx.draw_networkx_edges(G, pos)\n",
"\n",
"# Draw atom labels\n",
"labels = {n: G.nodes[n][\"label\"] for n in G.nodes}\n",
"nx.draw_networkx_labels(G, pos, labels, font_size=12, font_weight=\"bold\")\n",
"\n",
"plt.axis(\"off\")\n",
"plt.gca().set_aspect(\"equal\", \"box\") # keep proportions\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "spec",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.7"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}