使用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"。
