目的:我目前正在与rdkit合作,根据rdkit.Chem.Draw.SimilarityMaps
为我的分子结构着色。现在,我想使用matplotlib imagesSimilarityMaps
函数在pandas数据帧中引入它们,并以html文件的形式导出该表。在
代码:我试着用下面的代码做到这一点
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import SimilarityMaps
from rdkit.Chem.Draw import IPythonConsole #Needed to show molecules
from rdkit.Chem.Draw.MolDrawing import MolDrawing, DrawingOptions
df = pd.DataFrame({'smiles':['Nc1nc(NC2CC2)c3ncn([C@@H]4C[C@H](CO)C=C4)c3n1','CCCC(=O)Nc1ccc(OCC(O)CNC(C)C)c(c1)C(C)=O','CCN(CC)CCNC(=O)C1=CC=C(C=C1)NC(=O)C','CC(=O)NC1=CC=C(C=C1)O','CC(=O)Nc1sc(nn1)[S](N)(=O)=O']})
def getSim(smi):
mol = Chem.MolFromSmiles(smi)
refmol = Chem.MolFromSmiles('c1ccccc1')
fp = SimilarityMaps.GetMorganFingerprint(mol, fpType='bv')
fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(refmol, mol, SimilarityMaps.GetMorganFingerprint)
return fig
df['map'] = df['smiles'].map(getSim)
df.to_html('/.../test.html')
当我打开文件test.html
时,map列包含信息“Figure(200x200)”。我检查我的dataframe map列是否包含object:在python中可以,但在html文件中不可以。在
问题:我不知道如何获得带有图像的数据帧,我希望能得到社区的帮助来澄清这个问题。在
提前谢谢
您看到的
Figure (200x200)
是matplotlib图形类的__repr__
字符串。它是python对象的文本表示(与您在执行print(fig)
时看到的相同)。在相反,您需要的是在表中有一个实际的图像。一个简单的选择是将matplotlib图形保存为png图像,创建一个html标记
<img src="some.png" />
,然后显示该表。在这样做的缺点是磁盘上保存了很多图像。如果不需要,可以将编码为base64的图像存储在html文件
^{pr2}$<img src="data:image/png;base64,iVBORw0KGgoAAAAN..." />
中。在输出看起来相同,但没有保存到磁盘上的图像。在
这在Jupyter笔记本电脑上也能很好地工作,只需稍作修改
相关问题 更多 >
编程相关推荐