用Python绘制分子结构
文章目录
- SMILES文件简介
- rdkit绘制分子结构
- rdkit保存分子结构图
- 三维结构
SMILES文件简介
SMILES,即简化分子线性输入系统(Simplified molecular input line entry system),是通过ASCII描述分子结构的规范。
Smiles文件有如下规则
- 原子用方括号括起,仅有有机物中的C、N、O、P、S、Br、Cl、I等原子可以省略方括号
- 氢原子常被省略
- 双键为
=
;三键为#
- 结构中的环要被打开,断开处的两个原子用同一个数字表示
- 芳环中的C、O、S、N原子用小写字母c,o,s,n表示
- 碳链分支用圆括号表示。
- 芳香结构中的N原子上连有一个H原子,用[nH]表示
- 用@和@@表示手性
rdkit绘制分子结构
在rdkit
中,通过Chem
将Smiles字符串转换为化学结构,然后可以通过Draw
将化学结构画出来。
考虑到从简单入手,可以先绘制一个苯环,苯环中只有C,而且一般记作单双键交替的结构,根据成环规则,可写为C1=CC=CC=C1
,效果如下
代码为
from rdkit import Chem
from rdkit.Chem import Draw
import matplotlib.pyplot as plt
Benzene = 'C1=CC=CC=C1'
mol = Chem.MolFromSmiles(Benzene)
img = Draw.MolsToGridImage([mol],molsPerRow=1)
plt.imshow(img)
plt.axis('off')
plt.show()
其中,MolsToGridImage
用于将分子结构转化为图像,molsPerRow
表示每行绘制的分子数。
rdkit保存分子结构图
RDkit
内置的画图程序也可以展示分子结构,相比于调用plt
而言更加方便,用下面的函数也可以画出苯环,但是并没有plt
提供各种缩放、保存按钮而已。
Draw.ShowMol(mol, size=(400,200))
为了解决保存的问题,rdkit
提供了Draw.MolToFile
函数,可以输出图像。
Draw.MolToFile(mol, 'Benzene.png', size=(400, 200), kekulize=False)
这个图在保存时使用了kekulize
参数,其绘制效果如图所示
当然,苯环画起来其实没什么意思,接下来可以画一个有意思的,就是网上流传甚广的2,3二氧杂二环[2,2,2]-5-辛烯
smi = 'C1CC2C=CC1OO2'
mol = Chem.MolFromSmiles(smi)
Draw.ShowMol(mol, size=(400,200))
Draw.MolToFile(mol, 'smi.png', size=(400, 200))
效果如图所示
三维结构
但这个东西虽然看上去萌,但显然不是个二维生物,接下来就学习绘制一下三维分子结构。这个过程并不复杂,但需要通过MMFFOptimizeMolecule
来优化其三维构型,最后得到
好吧,看上去更萌了,其代码如下。
from rdkit.Chem import AllChem
smi = 'C1CC2C=CC1OO2'
m3d = Chem.MolFromSmiles(smi)
AllChem.EmbedMolecule(m3d, randomSeed=3)
AllChem.MMFFOptimizeMolecule(m3d)
Draw.MolToFile(m3d, 'm3d.png', size=(400, 200))
其中,AllChem.EmbedMolecule
用于生成3D构象,一般来说需要引入一个随机量来对三维结构进行初始化,输入随机数种子randomSeed
,有利于复现计算结果。
用Python绘制分子结构相关推荐
- 怎么用python找论文_如何利用Python绘制学术论文图表方法
论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...
- python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码
通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...
- python绘制所有特征的密度图(density plot)
python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...
- python绘制影像组学训练集、测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图)
python绘制影像组学训练集.测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图) # 所有数据的瀑布图 tagets_all = df['label'] tagets_all = df. ...
- 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)
来源:大数据DT 本文约5400字,建议阅读10分钟 本文为你介绍数据分析时经常用到的折线图,可以用来呈现哪些数据关系?在数据分析过程中可以解决哪些问题?怎样用Python绘制折线图? 01 概述 折 ...
- 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?(附代码)
来源:大数据DT(ID:hzdashuju) 作者:屈希峰,资深Python工程师,知乎多个专栏作者 本文约8000字,建议阅读20分钟 柱状图是当前应用最广泛的图表之一,你几乎每天都可以在电子产品上 ...
- 层次聚类python_用python绘制层次聚类图
层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...
- 利用Python绘制 3D 体素色温图
简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...
- python绘制直方图显示数字_Python实现绘制双柱状图并显示数值功能示例
本文实例讲述了Python实现绘制双柱状图并显示数值功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 import matplotlib.py ...
最新文章
- centos7通过yum安装php方法
- boost::pointer_traits的用法实例
- Qt5.0中lineEdit的输入输出
- 台式计算机单核与双核,什么是单核cpu、双核cpu 单核cpu和双核cpu的区别是什么...
- 动手学PaddlePaddle(0):新版本PaddlePaddle安装
- 工业视觉中的目标检测——兼谈天池大赛优胜方案
- branch and bound(分支定界)算法-基础概念
- Hyperledger Fabric 实战(八):couchdb 丰富查询 selector 语法
- 怎么在html中加入pjax,网页添加Pjax代码实现无刷新加载
- c语言设计二级考试程序修改题,全国计算机c语言二级考试试题
- 程序员的五种不同寻常的特质
- 新型城镇化:智慧城市成亮点
- Bootstrap官网的Bootstrap 3 字体图标的使用测试
- 梁宁《产品思维》之4+3同理心训练
- fluent 对电机油冷分析_油冷机冬季常见故障、原因分析及排除方法
- win10全屏之后任务栏不消失的问题
- Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 翻译
- 网易跨域实现笔记以及顺便发现的XSS
- centos7下安装无头浏览器(headless Chrome)
- python代码根据数据画图
热门文章
- JavaWeb学习:session
- WLAN从入门到精通(阅读总结)
- 数电实验四-触发器(Multisim和Basys3)
- visio的vsd文件转eps图流程
- .NET Core 和 .NET Framework 中的 MEF2
- TL494电源芯片使用记录分享
- 16福师硬盘是计算机的,福师16春《计算机应用基础》在线作业一分析.docx
- 瑜伽美体塑形馆小程序课程报名系统开发制作
- 【来袭】iTOP-3568开发板Android11系统移植视频教程
- Before you can run VMware, several modules must be compiled and loaded into the running kernel.