文章目录

  • SMILES文件简介
  • rdkit绘制分子结构
  • rdkit保存分子结构图
  • 三维结构

SMILES文件简介

SMILES,即简化分子线性输入系统(Simplified molecular input line entry system),是通过ASCII描述分子结构的规范。

Smiles文件有如下规则

  1. 原子用方括号括起,仅有有机物中的C、N、O、P、S、Br、Cl、I等原子可以省略方括号
  2. 氢原子常被省略
  3. 双键为=;三键为#
  4. 结构中的环要被打开,断开处的两个原子用同一个数字表示
  5. 芳环中的C、O、S、N原子用小写字母c,o,s,n表示
  6. 碳链分支用圆括号表示。
  7. 芳香结构中的N原子上连有一个H原子,用[nH]表示
  8. 用@和@@表示手性

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绘制分子结构相关推荐

  1. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  2. python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码

    通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...

  3. python绘制所有特征的密度图(density plot)

    python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...

  4. python绘制影像组学训练集、测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图)

    python绘制影像组学训练集.测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图) # 所有数据的瀑布图 tagets_all = df['label'] tagets_all = df. ...

  5. 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)

    来源:大数据DT 本文约5400字,建议阅读10分钟 本文为你介绍数据分析时经常用到的折线图,可以用来呈现哪些数据关系?在数据分析过程中可以解决哪些问题?怎样用Python绘制折线图? 01 概述 折 ...

  6. 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?(附代码)

    来源:大数据DT(ID:hzdashuju) 作者:屈希峰,资深Python工程师,知乎多个专栏作者 本文约8000字,建议阅读20分钟 柱状图是当前应用最广泛的图表之一,你几乎每天都可以在电子产品上 ...

  7. 层次聚类python_用python绘制层次聚类图

    层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...

  8. 利用Python绘制 3D 体素色温图

    简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...

  9. python绘制直方图显示数字_Python实现绘制双柱状图并显示数值功能示例

    本文实例讲述了Python实现绘制双柱状图并显示数值功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 import matplotlib.py ...

最新文章

  1. centos7通过yum安装php方法
  2. boost::pointer_traits的用法实例
  3. Qt5.0中lineEdit的输入输出
  4. 台式计算机单核与双核,什么是单核cpu、双核cpu 单核cpu和双核cpu的区别是什么...
  5. 动手学PaddlePaddle(0):新版本PaddlePaddle安装
  6. 工业视觉中的目标检测——兼谈天池大赛优胜方案
  7. branch and bound(分支定界)算法-基础概念
  8. Hyperledger Fabric 实战(八):couchdb 丰富查询 selector 语法
  9. 怎么在html中加入pjax,网页添加Pjax代码实现无刷新加载
  10. c语言设计二级考试程序修改题,全国计算机c语言二级考试试题
  11. 程序员的五种不同寻常的特质
  12. 新型城镇化:智慧城市成亮点
  13. Bootstrap官网的Bootstrap 3 字体图标的使用测试
  14. 梁宁《产品思维》之4+3同理心训练
  15. fluent 对电机油冷分析_油冷机冬季常见故障、原因分析及排除方法
  16. win10全屏之后任务栏不消失的问题
  17. Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 翻译
  18. 网易跨域实现笔记以及顺便发现的XSS
  19. centos7下安装无头浏览器(headless Chrome)
  20. python代码根据数据画图

热门文章

  1. JavaWeb学习:session
  2. WLAN从入门到精通(阅读总结)
  3. 数电实验四-触发器(Multisim和Basys3)
  4. visio的vsd文件转eps图流程
  5. .NET Core 和 .NET Framework 中的 MEF2
  6. TL494电源芯片使用记录分享
  7. 16福师硬盘是计算机的,福师16春《计算机应用基础》在线作业一分析.docx
  8. 瑜伽美体塑形馆小程序课程报名系统开发制作
  9. 【来袭】iTOP-3568开发板Android11系统移植视频教程
  10. Before you can run VMware, several modules must be compiled and loaded into the running kernel.