欢迎访问宙启技术站
智能推送

使用Python的MolsToGridImage()在网格中可视化多个分子结构

发布时间:2023-12-18 18:31:19

首先,我们需要安装相应的软件包,这可以通过运行以下命令来完成:

pip install rdkit-pypi
pip install matplotlib

安装完成后,我们可以使用以下代码来可视化多个分子结构:

import random
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit.Chem.Draw import SimilarityMaps
from rdkit.Chem.Draw.MolDrawing import DrawingOptions
import matplotlib.pyplot as plt

def visualize_molecules(molecules, grid_size):
    # 确定要在网格中放置多少个分子
    num_mols = len(molecules)
    if num_mols > grid_size**2:
        raise ValueError("Too many molecules to visualize in the given grid size!")

    # 设置绘图选项
    DrawingOptions.atomLabelFontFace = 'DejaVu Sans'
    DrawingOptions.atomLabelFontSize = 10

    # 创建一个Matplotlib图像和子图网格
    fig, axes = plt.subplots(grid_size, grid_size, figsize=(10, 10))
    axes = axes.ravel()  # 将子图网格展平成一维数组

    # 遍历每个分子并在网格中绘制
    for i in range(grid_size**2):
        ax = axes[i]
        if i < num_mols:
            mol = molecules[i]
            Draw.MolToMPL(mol, size=(200, 200), ax=ax)
            ax.set_title(f"Molecule {i+1}")
        # 删除未使用的子图
        else:
            fig.delaxes(ax)

    # 保持纵横比一致,并删除空白的子图
    plt.tight_layout()
    plt.show()

# 生成一些随机的分子结构
random_molecules = []
for _ in range(9):
    smiles = Chem.MolToSmiles(Chem.MolFromSmiles('C' + ''.join([random.choice(['H', 'C', 'N', 'O', 'P', 'S', 'F', 'Cl', 'Br', 'I']) for _ in range(random.randint(1, 10))])))
    random_molecules.append(Chem.MolFromSmiles(smiles))

# 在3x3网格中可视化分子结构
visualize_molecules(random_molecules, 3)

上述代码中,我们首先导入所需的库。然后,我们定义了一个visualize_molecules函数,该函数接受一个分子结构列表和网格大小作为输入。函数使用RDKit库来绘制分子结构,并将每个分子绘制到Matplotlib子图中。

接下来,我们生成了一些随机的分子结构,并将它们存储在一个列表中。我们使用visualize_molecules函数将这些随机分子结构可视化为3x3的网格。

最后,我们调用visualize_molecules函数并传递随机分子结构列表和网格大小3。

运行上述代码,你将会得到一个包含九个随机分子结构的网格图。每个分子结构都具有一个标题,例如"Molecule 1"。