При рисовании структур с помощью RDKit размер шрифта метки атома и размер кольца не находятся в хорошей пропорции. Этикетки либо слишком маленькие, либо слишком большие, либо смещены.
К сожалению, документации по этому поводу скудно. Я нашел это: https://rdkit.org/docs/source/rdkit.Chem.Draw.MolDrawing.html Но я не знаю, связано ли это и как мне пришлось бы это собрать. Мне не хватает простых практических примеров кода.
Я также пробовал Draw.MolToQPixmap
, но там я испытал, что метки атомов не выровнены, и до сих пор я узнал, что причина в сложности сделать эту кроссплатформенную согласованность и, кроме того, Draw.MolToPixmap
использует старый код рисования. Я должен использовать, например, Draw.MolToImage
вместо этого. Но там, как и у Draw.MolToFile
, размер шрифта просто маловат. Я не уверен, что это проблема кроссплатформенности (я использую Win10). Итак, решением было бы просто установить размер шрифта, но как?
Я знаю, что есть список рассылки RDKit, где я задал этот вопрос уже без ответа. Здесь, на SO, возможно, есть более широкая аудитория, и я могу прикрепить изображения для иллюстрации.
Код:
from rdkit import Chem
from rdkit.Chem import Draw
smiles = ' FC1OC2N3C4[Si]5=C6B7C(C=CC6=CC4=CC2=CC1)C=CC=C7C=C5C=C3'
mol = Chem.MolFromSmiles(smiles)
img = Draw.MolToFile(mol,"Test.png",size=(300,150))
Результат: (используется Draw.MolToFile
, выравнивание в порядке, но слишком маленькие метки атомов)
Результат: (используется Draw.MolToQPixmap
, смещено и / или шрифт слишком большой для маленьких изображений)
Изменить: (по предложению @Oliver Scott)
Я получаю в 3 раза одинаковый результат с одинаковым размером шрифта. Я должно быть где-то глупая ошибка или недоразумение.
Код:
from rdkit.Chem.Draw import rdMolDraw2D
from rdkit import Chem
smiles = 'FC1OC2N3C4[Si]5=C6B7C(C=CC6=CC4=CC2=CC1)C=CC=C7C=C5C=C3'
mol = Chem.MolFromSmiles(smiles)
def drawMyMol(fname, myFontSize):
d = rdMolDraw2D.MolDraw2DCairo(350, 300)
d.SetFontSize(myFontSize)
print(d.FontSize())
d.DrawMolecule(mol)
d.FinishDrawing()
d.WriteDrawingText(fname)
drawMyMol("Test1.png", 6)
drawMyMol("Test2.png", 12)
drawMyMol("Test3.png", 24)
Результат:
6.0
12.0
24.0