The*_*ude 7 python fonts matplotlib rc tex
我有一个我认为会发生更多的问题。但是,在网上搜索了一段时间后,我还没有找到解决问题的方法。所以这里是这样的:
对于使用 matplotlib.pyplot 创建的图,我想将 SI 单位微米合并到我的 xlabel 中。然而单位微米需要是直立的。经过一番摆弄之后,我获得了所需的 xlabel。
我必须生成的代码是:
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc('text', usetex = True)
params = {'text.latex.preamble': [r'\usepackage{siunitx}', r'\usepackage{cmbright}']}
plt.rcParams.update(params)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_xlabel('$\si{\micro \meter}$', fontsize = 16)
ax.set_ylabel("hi", fontsize = 16)
plt.savefig("test.png")
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
千分尺正是我想要的。然而,问题是 x 和 y 刻度的字体被改变了。这是因为:
matplotlib.rc('text', usetex = True)
Run Code Online (Sandbox Code Playgroud)
如何将字体值重置为其原始值?或者如何确保在引入 tex 时字体不会改变?
作为参考,我所指的原始值如下所示:
除了尝试将字体恢复为其原始值之外,我还尝试了将微米合并到我的 xlabel 中的不同方法。这里出现的问题是它仍然是斜体或者它有一个粗体设置。我正在寻找的千分尺是第一个图中给出的那个。
我希望有人能帮我解决这个问题。
提前谢谢
我也在努力解决这样的问题,即当 text.usetex = True 时使刻度标签和轴标签保持一致。我设法找到的解决方案并不理想,但目前有效。
你要做的就是将字体系列设置为“sans-serif”,并添加一个使用 sans-serif 数学字体的乳胶包(sfmath - 确保它在你的 tex 路径中!)
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc('text', usetex = True)
matplotlib.rc('font', **{'family':"sans-serif"})
params = {'text.latex.preamble': [r'\usepackage{siunitx}',
r'\usepackage{sfmath}', r'\sisetup{detect-family = true}',
r'\usepackage{amsmath}']}
plt.rcParams.update(params)
fig = plt.figure(figsize = (4,4))
ax = fig.add_subplot(1,1,1)
ax.set_xlabel('$\si{\um} detection$')
ax.set_ylabel(r"$\mu \boldsymbol{\mu}$")
plt.show()
Run Code Online (Sandbox Code Playgroud)
此外,我必须告诉 siunitx 包来检测字体系列,并且我还必须向 x 标签添加一些额外的文本,以便检测真正起作用(您可以稍后删除此文本,标签仍然会之后工作)。
对我来说这会导致:
更一般地说,我有以下 ~/.matplotlib/matploblibrc 文件,用于衬线字体:
font.family : serif
text.latex.preamble : \usepackage{mathptmx}
Run Code Online (Sandbox Code Playgroud)
对于无衬线字体:
font.family : sans-serif
text.latex.preamble : \usepackage{sfmath}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6915 次 |
| 最近记录: |