如何在matplotlib中包含chemfig图形(LaTeX软件包)?

时间:2019-04-01 11:23:39

标签: python matplotlib plot latex

我目前处于学习matplotlib.pyplot的状态,并且很高兴拥有LaTeX集成以尽可能完美地工作。

这是我目前拥有的:

import numpy as np
import matplotlib.pyplot as plt

# Latex implementation
plt.rc('text', usetex=True)
plt.rc('text.latex', preamble=r'\usepackage{chemfig},\usepackage{siunitx}')

# import data from file
with open ('vanillin.dat') as dat:
    lines = dat.readlines()
    wavenumbers = [float(line.split()[0]) for line in lines]
    absorption = [float(line.split()[1]) for line in lines]


# axis labels and plot title
plt.title("IR Spectrum of Vanillin", fontsize=22)

plt.xlabel('Wavenumber in cm$^{-1}$', fontsize=16)
plt.ylabel('Absorption in \%', fontsize=16)


# axis limits (Wavenumber on x coordinate has to be reversed)
plt.ylim(0,100)
plt.xlim(4000,600)

# grid and plot drawing
plt.grid(color='gray', linestyle=':')

plt.plot(wavenumbers, absorption, c='black', linewidth=0.5)

# save plot
plt.savefig('output.png')

上面的代码产生以下频谱:

Plain plot

现在,如果我要添加文本(包括来自包含的LaTeX程序包(即siunitx)中的宏,则此方法非常有效。这是添加的行(添加到plt.ylabel()下方,并在生成的图下方:

plt.text(3700, 80, r'Peak at \SI{1600}{\per\centi\meter} $\rightarrow$ carbonyl', fontsize=12)

Plot with added text using

现在,我想包括香草醛的结构,该结构是由下面的chemfig代码生成的:

\chemfig{*6((-HO)=(-O-[:-30])-=(-=[2]O)-=-)}

它是这样的:

Chemical structure of vanillin

如果我现在将代码包含在绘图中,则无法正确显示它:

plt.text(3300, 80, r'\chemfig{*6((-HO)=(-O-[:-30])-=(-=[2]O)-=-)}')

plot with chemfig structure which is not displayed correctly

有人知道如何解决此问题吗?

非常感谢!

0 个答案:

没有答案