在Jupyter-lab中使用RDKit画分子2D图

news2024/9/26 22:04:09

在Jupyter-lab中使用RDKit画分子2D图

在做完分子对接后,想看看筛选后的分子的结构。因此想利用Jupyter-lab来画分子的2D图。

1. 安装Jupyter-lab与RDKit

  • 系统:Win11
  • 已安装conda

RDKit 是一个功能强大、灵活易用的化学信息学工具包,广泛应用于药物发现、化学生物学、材料科学等领域。RDKit 提供了丰富的化学信息可视化功能,用户可以通过RDKit 生成分子结构图、化学反应图、药物分子的三维结构等,方便进行结果展示和分析。

1.1 安装RDKit

#创建并安装RDKit的conda环境
conda create -c conda-forge -n my-rdkit-env rdkit

#激活RDKit的虚拟环境
conda activate my-rdkit-env

不知道为啥,这一步很慢,不知道是不是conda channel的问题。但总归是等了一段时间就成功了。参考自官方教程。

1.2 安装Jupyter-lab

Jupyter Lab是Jupyter Notebook的升级版本,可以一个窗口中同时打开多个 Notebook、代码编辑器、终端、文件浏览器等,更方便地进行多任务处理和工作流程管理。Jupyter Lab集成了丰富的文档编辑器,包括 Markdown、LaTeX 等,用户可以方便地编写和编辑文档,同时可以通过插件支持更多的文档格式和扩展功能。最主要的是Jupyter Lab提供了丰富的可视化功能,用户可以通过插件支持各种图表库和数据可视化工具,实现更丰富和复杂的数据分析和可视化。

使用pip安装

pip install jupyterlab

参考自官方安装教程。

2. 小分子(SDF格式)作图

2.1 画单个SDF格式的分子图

以他莫昔芬(Tamoxifen)小分子为例,首先从PubChem网站下载该分子的三维结构的SDF结构文件。
在这里插入图片描述
如法炮制,再下载其余三个小分子:阿司匹林(Aspirin),莫洛昔康(Molnupiravir),瑞德西韦(Remdesivir)。将四个分子保存在sdf/文件夹中。

在CMD中跳转至cd sdf/文件夹路径下,打开Jupyter-lab

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Draw

#读取sdf文件
m1 = Chem.MolFromMolFile('sdf/Conformer3D_COMPOUND_CID_121304016.sdf')

#通过调用AllChem.Compute2DCoords(m1)计算出m1分子相应的二维坐标,并将其更新到分子对象中
AllChem.Compute2DCoords(m1)

#判断m1分子是否读取成功
m1 is None

#Draw.MolToImage()函数画出分子的2D图像
Draw.MolToImage(m1)

运行后结果如下:
在这里插入图片描述

  • 读取单个的SDF文件可以用Chem.MolFromMolFile(),尽管这个主要用于读取MOL格式的分子文件。
  • 读取一个存有多个分子集的SDF文件,主要用Chem.SDMolSupplier()
  • Chem.MolFromMolFile()无法读取PDB格式的分子文件,因此小分子文件读取主推SDF格式

2.2 画多个SDF格式的分子图

读取sdf/文件夹下的多个SDF分子,且将分子的2D图放在一张图中。

import os
import glob

# 指定小分子的存储路径
path = r'sdf/'

# 使用os.path.join构建路径,获取所有.sdf文件的路径列表
sdf_files = glob.glob(os.path.join(path, '*.sdf'))

# 将所有.sdf文件保存在一个列表ms中
ms = []
for sdf_file in sdf_files:
    m = Chem.MolFromMolFile(sdf_file)
    ms.append(m)

#计算出列表中分子的二维坐标,并将其更新到分子对象中  
for m in ms: tmp=AllChem.Compute2DCoords(m)

# MolsToGridImage()函数可以将4个分子画在一张图上
# molsPerRow=4参数设置4个小分子并排成一列
# subImgSize=(500,500)设置每个小分子的图像尺寸为500x500大小
# legends=x.GetProp("_Name")获取小分子的名称作为图例
img=Draw.MolsToGridImage(ms[:4],molsPerRow=4,subImgSize=(500,500),legends=[x.GetProp("_Name") for x in ms[:4]], returnPNG=False) 

# 保存分子图像为PNG格式文件在sdf/文件夹下
img.save('./Mol_4.png')

img

结果如下所示:
在这里插入图片描述
Draw.MolsToGridImage函数中设置returnPNG=False参数,主要用于在保存画出的图片时img.save()的报错:


AttributeError Traceback (most recent call last) Cell In[23], line 20
17 for m in ms: tmp=AllChem.Compute2DCoords(m)
19 img=Draw.MolsToGridImage(ms[:4],molsPerRow=4,subImgSize=(500,500),legends=[x.GetProp(“_Name”)
for x in ms[:4]])
—> 20 img.save(‘./Mol12_20.png’)
21 img

AttributeError: ‘Image’ object has no attribute ‘save’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端CSS常考问题总结

目录 CSS盒模型 CSS选择器的优先级 隐藏元素的方法 px和rem的区别是什么? 重绘重排有什么区别? 重排(回流): 重绘: 浏览器的渲染机制: 浏览器如何解析CSS? 元素水平垂直居中的方式 CSS的哪些属性哪些可以…

队列循环——C++引用详解【入队元素不引用 出队元素引用】(C语言版)

出队元素引用 入队元素不引用解释: 在给定的代码中,对于 DeQueue 函数的参数使用引用 (&),而对于 EnQueue 函数的参数没有使用引用,是基于函数内部对这些参数值的修改方式来确定的。 让我们分析一下每个函数: En…

SQL-Labs靶场“29-31”关通关教程

君衍. 一、二十九关 基于错误的WAF单引号注入1、源码分析2、HTTP参数污染3、联合查询注入4、updatexml报错注入 二、三十关 基于错误的WAF双引号注入1、源码分析2、联合查询注入3、updatexml报错注入 三、三十一关 基于错误的WAF双引号括号注入1、源码分析2、联合查询注入3、up…

windows10下如何通过命令行方式新增一个外部WLAN的Wifi热点并连接

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、背景 最近碰到2个家人windows下连接电脑热点的问题,一个是在某个培训场所显示的热点名称不是公布的热点名称,而是一个乱码,在家里和工作单位热点则显示正常&#xff…

【二叉搜索树】【前后指针】Leetcode 501. 二叉搜索树中的众数

【二叉搜索树】【前后指针】Leetcode 501. 二叉搜索树中的众数 解法1 中序遍历双指针解法2 我的复杂方法 先中序遍历到数组,之后hashmap遍历判断众数 之后转化为数组输出 ---------------🎈🎈题目链接🎈🎈-----------…

(已解决)emoji及其特殊符号在vue中的使用

问题叙述 使用问题&#xff1a;在表情库中点击后无法展示对应的emoji表情&#xff0c;仅仅显示Unicode代码编号&#xff0c;按照vue eslint规则更改添加分号后&#xff0c;没有报错但是依旧无法正确渲染。 问题源码&#xff1a; <template><div><!-- 被点击的…

KubeSphere简介,功能介绍,优势,架构说明及应用场景

KubeSphere 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器平台&#xff0c;提供简单易用的操作界面以及向导式操作方式&#xff0c;在降低用户使用容器调度平台学习成本的同时&#xff0c;极大减轻开发、测试、运维的日常工作的复杂度&#xff0c;旨…

【问题解决】| 关于torch无法使用GPU的一些实验探索,思考

文章目录 1 研究背景2 问题解决2.1 问题一&#xff0c;这两个版本分别是怎么得到的&#xff1f;2.2 问题二&#xff0c;Windows下安装CUDA Tookit 是必须的吗&#xff1f;2.3 问题三&#xff0c;驱动版本必须大于等于运行时版本吗&#xff1f;2.4 问题四&#xff0c;只运行pip …

力扣110 平衡二叉树 Java版本

文章目录 题目描述代码 题目描述 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,…

python笔记_程序流程控制

A&#xff0c;顺序控制 程序从上到下逐行执行 python定义变量时&#xff0c;会合法地向前引用 age 1 age2 age 1 age2 age 1 age 1 ——>错误&#xff0c;age应在age2之前 B&#xff0c;分支控制 1&#xff0c;单分支if 语法 if 条件表达式 &#xff1a; 代码块 说明…

代码随想录day10(2)字符串:反转字符串Ⅱ (leetcode541)

题目要求&#xff1a;给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起, 每计数至 2k 个字符&#xff0c;就反转这 2k 个字符中的前 k 个字符。如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c;则反转前…

两天学会微服务网关Gateway-Gateway简介

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…

Git 基于ED25519、RSA算法生成 SSH 密钥

Git 基于ED25519、RSA算法生成 SSH 密钥 基于ED25519算法&#xff0c;生成密钥对命令如下&#xff1a; ssh-keygen -t ed25519 -C "邮箱地址"基于RSA算法&#xff0c;生成密钥对命令如下&#xff1a; ssh-keygen -t rsa -C "<注释内容>"基于ED255…

中国各省绿色金融试点DID数据集(2010-2023)

一、数据简介 最新的2010-2023年中国31省绿色金融试点DID数据&#xff0c;供大家研究使用。 数据说明&#xff1a;内含绿色金融改革创新试验区名单&#xff0c;将试验区获批当年及以后的政策虚拟变量项是否试点赋值为1&#xff0c;获批之前赋值为0。其中赣江新区、贵安新区为国…

MySQL基础-----SQL语句之DDL语句

目录 前言 开启登录数据库 一、数据库操作 1.查询所有数据库 2.切换使用数据库 3.查询当前使用的数据库 4.创建数据库 创建一个hello数据库, 使用数据库默认的字符集。 创建一个itheima数据库&#xff0c;并且指定字符集 5.删除数据库 二、表操作 1.查询当前数据库所有…

递归与递推(蓝桥杯 c++)

目录 题目一&#xff1a; 代码&#xff1a; 题目二: 代码&#xff1a; 题目三&#xff1a; 代码&#xff1a; 题目四&#xff1a; 代码&#xff1a; 题目一&#xff1a; 代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int …

deep learning with pytorch(一)

1.create a basic nerual network model with pytorch 数据集 Iris UCI Machine Learning Repository fully connected 目标:创建从输入层的代码开始&#xff0c;向前移动到隐藏层&#xff0c;最后到输出层 # %% import torch import torch.nn as nn import torch.nn.funct…

Vue开发实例(五)修改项目入口页面布局

修改项目入口 一、创建新入口二、分析代码&#xff0c;修改入口三、搭建项目主页面布局1、Container 布局容器介绍2、创建布局3、布局器铺满屏幕4、创建Header页面5、加入Aside、Main和Footer模块 一、创建新入口 创建新的入口&#xff0c;取消原来的HelloWorld入口 参考代码…

图像分割 - 凸包(图像的轮廓)

1、前言 之前的文章 绘制几何图形的轮廓,介绍了矩形包围框和圆形包围框。 虽然这两种包围框以及足够逼近图形的边缘,但为了保持几何形状(矩形和圆形),其实与图形的真实轮廓贴合度较差,为了更贴近图形轮廓,这里介绍凸包。 凸包:图形最外层的端点,将端点连接起来,围…

[C++]AVL树怎么转

AVL树是啥 一提到AVL树&#xff0c;脑子里不是旋了&#xff0c;就是悬了。 AVL树之所以难&#xff0c;并不是因为结构难以理解&#xff0c;而是因为他的旋转。 AVL树定义 平衡因子&#xff1a;对于一颗二叉树&#xff0c;某节点的左右子树高度之差&#xff0c;就是该节点的…